我的数学作业要求我开发一些形式的排序算法,我决定从一个简单的#34;开始。一:泡沫排序。
我有两个清单:
3.3 5 9.89 -6
和
-564 1340 42 129 858 1491 1508 246 -1281 655 1506 306 290 -768 116 765 -48 -512 2598 42 2339
我能够轻松地对第一个进行排序,但在第二个排序中间存在问题。
这是我的一大块代码,负责排序。
int bubbleSort(std::list<double> list)
{
std::list<double>::iterator it; // First iterator i
std::list<double>::iterator it2; // Second iterator i+1
int comp = 0;
it = list.begin();
it2 = list.begin();
it2++;
for (int i = list.size() - 1; i > 0; --i)
{
for (int j = 0; j < i; j++)
{
comp++;
if (*it2 < *it) // If my second item is smaller than my first one, swap them
{
std::swap(*it2, *it);
it = list.begin();
it2 = list.begin();
it2++;
break;
}
it++;
it2++;
}
}
return comp;
}
这是我得到的输出列表,因为你可以看到它在中途停止排序:
-1281 -564 42 129 246 858 1340 1491 655 1508 1506 306 290 -768 116 765 -48 -512 2598 42 2339
我的算法在哪里出错?
答案 0 :(得分:3)
这是您可能正在寻找的冒泡排序的工作代码。
正确初始化它,it2在第一个循环中。
#include <bits/stdc++.h>
using namespace std;
int bubbleSort(std::list<double> &list) {
std::list<double>::iterator it; // First iterator i
std::list<double>::iterator it2; // Second iterator i+1
int comp = 0;
for (int i = list.size() - 1; i > 0; --i) {
it = list.begin();
it2 = list.begin();
it2++;
for (int j = 0; j < i; j++) {
comp++;
if (*it2 < *it) { // If my second item is smaller than my first one, swap them
std::swap(*it2, *it);
//it = list.begin();
//it2 = list.begin();
//it2++;
//break;
}
it++;
it2++;
}
}
return comp;
}
int main() {
list<double> l;
int n;
cin >> n;
while (n--) {
double tmp;
cin >> tmp;
l.push_back(tmp);
}
bubbleSort(l);
for (list<double>::iterator i = l.begin(); i != l.end(); i++) {
cout << *i << " ";
}
cout << endl;
}