冒泡排序不能给出正确的输出



我做了这个冒泡排序代码,但它似乎不工作,有人可以解释为什么?

#include <iostream>
using namespace std;
int main(){
int numbers[5]={2,7,9,3,4};

for(int i=0;i<5;i++){
for(int j=0;j<i;j++){
if(numbers[j]>numbers[j+1]){
int temp=numbers[j];
numbers[j]=numbers[j+1];
numbers[j+1]=temp;
}
}
}
for(int i=0;i<5;i++){
cout<<numbers[i]<<endl;
}
}

当您将内部循环的条件更改为j < 4 - i: https://godbolt.org/z/TP9vWzbaP

时,您的代码将正常工作但这不是冒泡排序,维基百科有一个关于冒泡排序的页面:https://en.wikipedia.org/wiki/Bubble_sort

外循环必须运行,直到不再交换为止。

#include <iostream>
using namespace std;
int main(){
int numbers[5] = {2, 7, 9, 3, 4};
int n = std::size(numbers);
bool swapped;
do {
swapped = false;
for (int j = 0; j < n - 1; j++){
if(numbers[j] > numbers[j + 1]){
swapped = true;
int temp=numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
}
}
n--;
} while (swapped);
for(int i=0;i<5;i++){
cout<<numbers[i]<<endl;
}
}

https://godbolt.org/z/E53dcejW5

最新更新