当我输入1,2,3,4,5作为输入时。输出很好,因为它已经从最低到高排序。但是当我键入5,4,3,2,1时它输出:
4,3,2,1,5
顺便说一下,我正在尝试冒泡。
main() {
int a[5], i, smallest, temp;
cout << "Enter 5 numbers: " << endl;
for ( i = 0; i <= 4; i++ ) {
cin >> a[i];
}
for ( i = 0; i <= 4; i++ ) {
smallest = a[i];
if ( smallest > a[i+1] ) {
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
}
cout << endl << endl;
for ( i = 0; i <= 4; i++ ) {
cout << a[i] << endl;
}
system("pause");
}
我在您的回复后确实将我的代码更改为:
for ( i = 0; i <=4; i++ ) {
smallest = a[i];
for ( j = 1; j <= 4; j++ ) {
if ( smallest > a[j] ) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
我不知道为什么它不起作用。我真的很抱歉,因为我是编程中的菜鸟,所以请耐心等待我刚刚开始:)
任何帮助都将受到高度赞赏。
谢谢^。^
答案 0 :(得分:6)
单次传递是不够的,你必须一遍又一遍地扫描数组,直到没有执行交换:
bool sorted = false;
while (!sorted) {
sorted = true;
for ( i = 0; i <= 4 - 1; i++ ) { /* notice 4 - 1 since we address a[i + 1] */
smallest = a[i];
if ( smallest > a[i+1] ) {
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
sorted = false;
}
}
}
答案 1 :(得分:1)
因为你的所有算法都是,所以将最大的数字移动到数组的末尾。由于bubble sort
具有时间复杂度O(n²)
,因此使用两个嵌套循环是必要的。您可以重复编写的循环,直到对数组进行排序。请注意,这不是很有效,但它应该有效。
您还应该检查您是否不会访问超出数组范围的索引。