在c中的冒泡排序中获得不同的输出

gettting different output in bubble sort in c

嘿,我是 dsa 的新手,所以我正在学习冒泡排序,但我的输出不同,请参阅下面的代码

输出应该是:7,12,21,70,83
我的输出是:12,7,70,21,83
这是不正确的

#include <stdio.h>

void bubble_sort(int duparray[], int num) {
    int temp, i, j;
    
    for (i = 0; i < num - 1; i++) { // i means number of passes
        for (j = 0; j < num - 1 - i; j++) {
            if (duparray[i] > duparray[i + 1]) {
                temp = duparray[i];
                duparray[i] = duparray[i + 1];
                duparray[i + 1] = temp;
            }
        }
    }
    for (int i = 0; i < num; i++) {
        printf("%d ", duparray[i]);
    }
}

void display(int duparray[], int num) {
    for (int i = 0; i < num; i++) {
        printf("%d ", duparray[i]);
    }
}

int main() {
    int array[5] = { 70, 12, 7, 83, 21 };
    int n = 5;
    display(array, n);
    printf("\n");
    bubble_sort(array, n);
    // display(array, n);

    return 0;
}

for 循环看起来应该是这样的

for( i=0;i<num-1;i++){// i means number of passes
    for( j=0;j<num-1-i;j++){
        if(duparray[j]>duparray[j+1]){
            temp=duparray[j];
            duparray[j]=duparray[j+1];
            duparray[j+1]=temp;

        }
    }

即使用jj+1作为被比较和交换的元素的索引。请注意,i 在内循环中不会更改,因此您的代码只是重复比较相同的两个元素。

如果您进行更改,则输出将是

70 12 7 83 21 
7 12 21 70 83