[英]Reverse Bubble Sort Algorithm in C using only while loop
我正在嘗試創建一個反向冒泡排序算法。 它有效,但第一個 output 是一個我不明白的瘋狂數字。 其余輸出似乎按降序排序。 我的代碼哪里錯了?
#include <stdio.h>
void ft_rev_int_tab(int *tab, int size)
{
int i;
int j;
int k;
i = 0;
while (i < size)
{
j = 0;
while (j < size -i)
{
if (tab[j] < tab[j+1])
{
k = tab[j];
tab[j] = tab[j+1];
tab[j + 1] = k;
}
j++;
}
i++;
}
}
int main(void)
{
int tab[] = {9, 320, 0, 113, 15};
int size = sizeof(tab) / sizeof(*tab);
ft_rev_int_tab(tab, size);
for (int i = 0; i < size; i++)
{
printf ("%d\n", tab[i]);
}
}
i = 0;
之前while (i < size)
是錯誤的。 當i
為零時,條件j < size -i
等價於j < size
。 在這種情況下, j
最多size-1
,現在tab[j+1]
超出范圍。
應改為i = 1;
.
void ft_rev_int_tab(int *tab, int size) {
int i;
int j;
int k;
i = 0;
while (i < size) {
j = 0;
while (j < size - i - 1) {
if (tab[j] < tab[j + 1]) {
k = tab[j];
tab[j] = tab[j + 1];
tab[j + 1] = k;
}
j++;
}
i++;
}
}
您在嵌套 while 循環中的條件應該是(j < size - i - 1)
因為您只需要檢查從tab[0]
到tab[i-1]
的值。 您的 if 和 swap 檢查tab[j]
和tab[j+1]
,因此當i
等於數組的大小時,您會將其與數組外的值進行比較。 在您的示例中是tab[5]
的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.