Bubble-Sort不按C(Cormen的伪代码)排序

时间:2019-01-16 08:17:43

标签: c arrays sorting bubble-sort

所以我试图实现Cormen's pseudocode进行气泡排序,但似乎无法正常工作。

这是我对Cormen伪代码的处理方式:

void BUBBLE_SORT(int a[200], int n) {
    int i, j, aux;

    for (i = 1; i <= n - 1; i++) {
        for (j = n; j < i + 1; j++) {
            if (a[j] < a[j - 1]) {
                aux = a[j];
                a[j] = a[j + 1];
                a[j + 1] = aux;
            }
        }
    }
}

我尝试了在互联网上找到的另一段代码,但结果没有不同:

void bubbleSort(int arr[], int n) {
    int i, j;     
    for (i = 0; i < n - 1; i++)          
        for (j = 0; j < n - i - 1; j++)  
            if (arr[j] > arr[j + 1]) 
                swap(&arr[j], &arr[j + 1]);  
}

我很想知道我的理解力在理解Cormen的实现方面失败了,并使气泡排序起作用!

2 个答案:

答案 0 :(得分:3)

至少有三个问题:

  1. 该伪代码假定数组索引从1length。在C中,数组从0length-1的索引;您的代码不正确。

  2. 伪代码中的内部循环为 downto i+1,但是您的内部循环尝试向上计数

    for(j=n;j<i+1;j++)
    

    应该是

    for (j = n; j > i; j--)
    
  3. 伪代码交换A[j]A[j-1],但是您的C代码交换A[j]A[j+1]

答案 1 :(得分:0)

实施中的错误:

  1. 您从第一个索引开始计数数组。但是在C程序中,数组从第0个位置开始。 [您应该对i = 0,而不是i = 1]
  2. 内部循环必须从 j = i + 1 j = n-1 j 的值必须减小。
  3. 您将 a [j] a [j-1] 进行了比较,但是您交换了 a [j] a [j + 1] 。您应该与 a [j-1]
  4. 交换 a [j]

查看下面代码中的更改。希望它会有用:

int i, j, aux;
for(i=0;i<n-1;i++){
    for(j=n-1;j>=i+1;j--){
        if(a[j]<a[j-1]){
            aux=a[j];
            a[j]=a[j-1];
            a[j-1]=aux;
        }
    }
}