气泡排序:为什么它不能正常工作?

Bubble sort: Why it isn't working correctly?

本文关键字:工作 常工作 排序 为什么 不能 气泡      更新时间:2023-10-16

当我键入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;
        }
    }
}

我不知道为什么它不起作用。我真的很抱歉,因为我是编程中的菜鸟,所以请忍受我刚起步:)

任何帮助都将不胜感激。

谢谢 ^。 ^

单个通行证还不够,您必须一遍又一遍地扫描数组,直到没有进行交换:

 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;
        }
    } 
 }

,因为您的所有算法都可以将最大数字移至数组末端。由于bubble sort具有时间复杂性O(n²),因此必须使用两个嵌套周期。您只需重复编写的周期,直到对数组进行排序。请注意,这不是很有效,但应该起作用。

您还应该检查您是否将无法访问来自数组范围的索引。