试图在c++中实现一个简单的一次性冒泡排序



我正在尝试进行冒泡排序

#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,912351541411299021378231366。有什么帮助吗?对不起,如果这微不足道。

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

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

您得到了一个额外的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添加到列表中,该列表仍然具有其旧值,因为除了EOF之外,cin没有读取任何输入。我在第一个代码段中的正确操作修复了这个问题。

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

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

则最后一个元素仅被添加一次。您还需要更改输出循环的边界。

请参阅有关while (cin) 的此问题

您必须运行嵌套循环

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

现在你把231366这个最大的数字移到了列表的末尾。你必须在.

上迭代

最新更新