【问题标题】:Reverse Bubble Sort Algorithm in C using only while loopC中的反向冒泡排序算法仅使用while循环
【发布时间】:2021-07-18 04:17:09
【问题描述】:

我正在尝试创建一个反向冒泡排序算法。它有效,但第一个输出是一个我不明白的疯狂数字。其余输出似乎按降序排序。我的代码哪里错了?

   #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]);
   } 
   }

【问题讨论】:

  • 代码中的第一个错误是缩进。

标签: c algorithm reverse bubble-sort


【解决方案1】:

while (i &lt; size) 之前的i = 0; 是错误的。当i 为零时,条件j &lt; size -i 等价于j &lt; size。在这种情况下,j 最多为size-1,现在tab[j+1] 超出范围。

应该改为i = 1;

【讨论】:

    【解决方案2】:
    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 &lt; size - i - 1) 因为您只需要检查从tab[0]tab[i-1] 的值。您的 if 和 swap 检查 tab[j]tab[j+1],因此当 i 等于数组的大小时,您会将其与数组外的值进行比较。在您的示例中是 tab[5] 的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-26
      • 2016-08-31
      • 2015-01-17
      • 2018-08-11
      • 2013-07-13
      • 2021-05-11
      • 2014-04-17
      相关资源
      最近更新 更多