首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >冒泡排序疑点

冒泡排序疑点
EN

Stack Overflow用户
提问于 2015-05-08 13:18:10
回答 2查看 51关注 0票数 0
代码语言:javascript
运行
复制
#include<stdio.h>
#include<conio.h>

int main( )
{
     int a[100]; 
     int i, j, temp, n ;
     printf("how many numbers you want to sort : \n");
     scanf("%d",&n);
     printf("Enter %d number values you want to sort\n", n);
     for(j=0; j<n; j++)
     scanf("%d",&a[j]);

     for(j=1;j<n;j++)

我们怎么知道上面提到的for循环必须重复n次,应该如何开发逻辑呢?我知道内部for循环只能帮助对列表中的元素排序一次,那么为什么我们要重复n次内部循环呢?

代码语言:javascript
运行
复制
     {
          for(i=0; i<n; i++)
          {
               if(a[i]>a[i+1])
               {
                     temp=a[i];
                     a[i]=a[i+1];
                     a[i+1]=temp;
               } 
          }
     }

     printf ( "\n\nArray after sorting:\n") ;

     for ( i = 0 ; i <n ; i++ )
     printf ( "%d\t", a[i] ) ;
     getch();
 }
EN

回答 2

Stack Overflow用户

发布于 2015-05-08 13:28:20

在内部循环中,您将找到maximum。您不能确保对其他数字进行排序。

其他版本(更快):

代码语言:javascript
运行
复制
do
for (i = 0; i < n-1; i++) do:
  if A[i] > A[i+1] then
    swap(A[i], A[i+1])
  end if
end for
n = n-1

当n>1时

(不检查之前循环的最大值)

票数 0
EN

Stack Overflow用户

发布于 2015-05-08 13:31:17

为了理解该代码,提取将数组的当前值输出到单独函数的代码。然后,每次交换两个元素时,输出一条消息,说明交换了哪些元素以及结果数组现在是什么样子。

您不仅会看到它是如何排序的,而且还会在代码中发现一个bug。我会试着进一步帮助你,但我不想破坏你的学习经验。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30116321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档