冒泡排序不在 C 中排序(Cormen 的伪代码)
Bubble-Sort not sorting in C (Cormen's pseudocode)
所以我试图实现 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 的实现和让冒泡排序起作用时我的理解失败了!
至少存在三个问题:
伪代码假定数组索引从 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]
。
实施中的错误:
- 你从第一个索引开始计算你的数组。但是在 C 语言中,数组从第 0 个位置开始。 [你应该把 i = 0 改成 i = 1]
- 内循环必须运行 from j = n-1 from j = i+1 和 j 的值一定是递减的。
- 你比较a[j]和a[j-1] 但是你把 a[j] 换成了 a[j+ 1]。你应该交换 a[j] 和 a[j-1]
查看下面代码中的更改。希望它有用:
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;
}
}
}
所以我试图实现 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 的实现和让冒泡排序起作用时我的理解失败了!
至少存在三个问题:
伪代码假定数组索引从
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]
。
实施中的错误:
- 你从第一个索引开始计算你的数组。但是在 C 语言中,数组从第 0 个位置开始。 [你应该把 i = 0 改成 i = 1]
- 内循环必须运行 from j = n-1 from j = i+1 和 j 的值一定是递减的。
- 你比较a[j]和a[j-1] 但是你把 a[j] 换成了 a[j+ 1]。你应该交换 a[j] 和 a[j-1]
查看下面代码中的更改。希望它有用:
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;
}
}
}