【问题标题】:Trying to implement a simple one-time bubble sort in c++尝试在 C++ 中实现一个简单的一次性冒泡排序
【发布时间】:2015-06-27 22:16:17
【问题描述】:

我正在尝试进行冒泡排序。这是我所拥有的:

#include <iostream>
#include <vector>
using namespace std;

int main() {
    double small;
    double big;
    double i;
    vector<double>list;
    while(cin){
        cin>>i;
        list.push_back(i);
    }
    for(i=0;i<list.size()-1;i++){
        small=list[i];
        big=list[i+1];
        if(small<=big){
        }
        else{
            list[i]=big;
            list[i+1]=small;
        }
    }
    for(i=0;i<list.size()-1;i++)
        cout<<list[i]<<'\n';
    return 0;
}

这是我的意见:

123
4141
515
231366
21378
12990
5
6
8
9

但它会输出这个:

123
515
4141
21378
12990
5
6
8
9        
9        
231366

预期的输出应该是:5,6,8,9,123,515,4141,12990,21378,231366。(忽略这个,我很笨,除了重复的数字外,输出是正确的)。有什么帮助吗?对不起,如果这是微不足道的。

【问题讨论】:

  • 你期望什么输出?
  • 这不清楚。你期待什么输出?
  • 如果“只经历一次”是指一次迭代,那么你的输出是正确的(但我认为你在那里写了两次9)。如果你的意思是别的,请解释清楚。

标签: c++


【解决方案1】:

9 被读取两次,因为你使用的是while(cin),应该是

while(cin >> i){
    list.push_back(i);
}

【讨论】:

    【解决方案2】:

    您会得到一个额外的9,因为这是您输入的最后一件事,而且您没有正确跳出循环。因此,您最终将其添加到您的列表中两次。像这样更合适:

    while(cin>>i){
      list.push_back(i);
      cout << "Adding " << i << "\n";
    }
    

    在您之前的原因中,您有以下情况:

    while(cin){
        cin>>i; // <-- reaches the end of file
        list.push_back(i); // <-- puts something in the list even though we didn't read anything
    }
    

    请注意,当cin 到达EOF 时,您仍会将i 添加到列表中,该列表仍具有其旧值,因为cin 除了EOF 之外没有读取任何输入。我在第一个代码段中的正确解决了这个问题。

    【讨论】:

      【解决方案3】:

      您的输入循环运行了太多次,在列表末尾给出了重复的元素。如果将 while 循环更改为:

       while(cin >> i){
          list.push_back(i);
       }
      

      那么最后一个元素只添加一次。您还需要更改输出循环的边界。

      查看this question 了解while (cin)

      【讨论】:

        【解决方案4】:

        你必须运行一个嵌套循环

        for(j=0;j<list.size()-1;j++){
            for(i=0;i<list.size()-1-j;i++){
        

        现在您正在将最大数字 231366 移到列表末尾。你必须迭代。

        【讨论】:

          猜你喜欢
          • 2013-01-23
          • 1970-01-01
          • 1970-01-01
          • 2017-03-11
          • 2017-02-14
          • 2020-09-26
          • 2012-07-23
          • 2020-08-23
          相关资源
          最近更新 更多