【问题标题】:Can anyone tell me the problem[s] in this bubble sort? [closed]谁能告诉我这个冒泡排序中的问题? [关闭]
【发布时间】:2020-04-08 07:34:19
【问题描述】:

我查看了几个这种冒泡排序的示例,但似乎无法找出我的问题所在, 我对循环等很弱。 我明天必须向我的班级解释这一点,如果有人能提供帮助,那就太好了,谢谢

int main(){

int i,n,j,temp;
int a[] = {5,4,3,2,1};
n    = 5;

for(i=0;i<n;i++){
    for(j = 0;j<n-i-1;j++){
        if(a[j]>a[j+1]){            
            temp = a[j];                
            a[j] = a[j+1];
            a[j+1] = temp;
        }
    }
    printf("%d",a[i]);
}}

【问题讨论】:

  • 出了什么问题?如果您在每次更改发生时打印出来怎么办?
  • 您的printf 放错地方了!等到排序完成,然后有一个单独的循环打印出值 - 你会对结果感到惊讶!
  • 至少将 printf() 放在一个单独的循环中。并添加一个'\n'。

标签: c sorting bubble-sort


【解决方案1】:

问题不在于您的冒泡排序。您错过了放置printf 删除它并在排序循环后添加这样的循环:

    for (i = 0; i < 5; i++)
    {
        printf("%d ", a[i]);
    }

【讨论】:

    【解决方案2】:

    如果您想使用printf 的调用来跟踪排序过程,那么您需要正确指定处于其最终位置的元素的索引。

    改变printf的调用

    printf("%d",a[i]);
                 ^^^
    

    到下面

    printf("%d ",a[j]);
                 ^^^
    

    在这种情况下,您将获得输出

    5 4 3 2 1 
    

    首先最大的元素占据了它的最终位置。然后剩余元素中的第二大元素占据其最终位置,依此类推。

    请注意,您应该在使用它们的最小范围内声明变量。而不是像 5 这样的幻数,而是使用命名常量。

    您还可以将结果数组的输出添加到程序中。

    这是您的更新程序。

    #include <stdio.h>
    
    int main( void )
    {
        int a[] = { 5, 4, 3, 2, 1 };
        const size_t N = sizeof( a ) / sizeof( *a );
    
        for ( size_t i = 0; i < N; i++ )
        {
            size_t j = 0;
            for ( ; j < N - i - 1; j++ )
            {
                if ( a[j+1] < a[j] )
                {            
                    int temp = a[j];                
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
            printf( "%d ", a[j] );
        }
    
        putchar( '\n' );
    
        for ( size_t i = 0; i < N; i++ )
        {
            printf( "%d ", a[i] );
        }
    
        putchar( '\n' );
    }  
    

    它的输出是

    5 4 3 2 1 
    1 2 3 4 5 
    

    【讨论】:

      猜你喜欢
      • 2021-08-15
      • 2020-09-06
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      • 2014-11-10
      • 2021-09-06
      相关资源
      最近更新 更多