所以我试图实现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的实现方面失败了,并使气泡排序起作用!
答案 0 :(得分:3)
至少有三个问题:
该伪代码假定数组索引从1
到length
。在C中,数组从0
到length-1
的索引;您的代码不正确。
伪代码中的内部循环为 downto
i+1
,但是您的内部循环尝试向上计数 :
for(j=n;j<i+1;j++)
应该是
for (j = n; j > i; j--)
伪代码交换A[j]
和A[j-1]
,但是您的C代码交换A[j]
和A[j+1]
。
答案 1 :(得分:0)
实施中的错误:
查看下面代码中的更改。希望它会有用:
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;
}
}
}