【问题标题】:Bubble sort isn't working while sorting in ascending order按升序排序时冒泡排序不起作用
【发布时间】:2021-05-17 15:19:18
【问题描述】:

我创建了一个程序,它从用户那里寻找关于 5 位数字(使用 char 数据类型)的输入,并根据 if 语句中设置的参数,根据升序或降序对其进行冒泡排序。

案例 1:如果 (a[j]

  • 输入:12345
  • 所需输出:54321
  • 输出:12345 - 工作

案例 2:如果 (a[j] > a[j+1])

  • 输入:54321
  • 所需输出:12345
  • 不起作用。

下面是我的代码:

int main()
{
    char a[6];
    int i, temp;
    int j = 0;

    printf("Enter a 5 digit number\n");
    scanf("%s", a);

    printf("You entered : %s\n", a);

    for ( i = 0 ; i < 5 ; i++ )
    {
        for ( j = 0 ; j < 6 - 1 - i ; ++j )
        {
            if ( a[j] > a[j+1] )
            {
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }
    
    printf("Bubble Sorted number : %s\n", a);

    return 0;
}

【问题讨论】:

  • 这个程序足够小,您可以逐行逐行执行。当 j 为 4 时会发生一些有趣的事情。

标签: arrays c sorting bubble-sort


【解决方案1】:

这个内部for循环

    for ( j = 0 ; j < 6 - 1 - i ; ++j )
    {
        if ( a[j] > a[j+1] )
        {
            temp = a[j];
            a[j] = a[j+1];
            a[j+1] = temp;
        }
    }

可以覆盖存储在数组a中的字符串的终止零字符'\0'

当在外循环中变量i 等于0 那么你实际上有以下内循环

    for ( j = 0 ; j < 5 ; ++j )
    {
        if ( a[j] > a[j+1] )
        {
            temp = a[j];
            a[j] = a[j+1];
            a[j+1] = temp;
        }
    }

在这种情况下,当循环中的 j 等于 4 时,与 a[5] 相同的表达式 a[j+1] 将产生终止零字符,该字符将与存储在数组元素a[4]

像这样重写内部循环

    for ( j = 1 ; j < 6 - 1 - i ; ++j )
    {
        if ( a[j-1] > a[j] )
        {
            temp = a[j-1];
            a[j-1] = a[j];
            a[j] = temp;
        }
    }

【讨论】:

  • 感谢您的精彩解释。这对我有用:)
猜你喜欢
  • 1970-01-01
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-16
相关资源
最近更新 更多