【发布时间】:2019-01-16 08:17:42
【问题描述】:
所以我试图实现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 的实现方面失败的地方,并让冒泡排序发挥作用!
【问题讨论】:
-
它看起来不正确,在您的 if 条件下,您将 a[j] 与 a[j-1] 进行比较,但如果交换也应将 a[j] 与 a[j+1] 交换和条件一样吗?
-
for(j=n;j<i+1;- 如果j = n和i < n,j怎么会小于i?你的内部循环没有意义。 -
嗯,我也这么认为。但是伪代码不是这么说的吗?我的意思是第 2 行:j=a.length。顺便说一句,“downto”指的是什么? “
-
@pustiul500 这意味着循环倒计时而不是倒计时。它不是在每次迭代后递增循环变量,而是递减它,目标值不是上限,而是下限。例如,
for i = 1 to 10从 1 计数到 10(1、2、3、...),但for i = 10 downto 1从 10 计数到 1(10、9、8、...)。
标签: c arrays sorting bubble-sort