簡體   English   中英

C 中的反向冒泡排序算法僅使用 while 循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM