开发者社区> 问答> 正文

冒泡排序算法的结束条件是什么?

冒泡排序算法的结束条件是什么?

展开
收起
知与谁同 2018-07-20 12:07:12 2414 0
6 条回答
写回答
取消 提交回答
  • 冒泡排序的结束条件是一次交换都没有发生,说明列表已经有序。即:检测某一趟比较里有没有进行交换,如果没有进行交换就直接跳出循环。

    2019-07-17 22:49:29
    赞同 展开评论 打赏
  • 两个循环的嵌套结束了也就结束了。
    2019-07-17 22:49:29
    赞同 展开评论 打赏
  • 主题的结构是这样的[N为个数]:
    for(i=0;i<N-1;i++)
    for(j=0;j<N-1-i;j++)
    2019-07-17 22:49:28
    赞同 展开评论 打赏
  • 胜天半子
    for的循环,自己多看看吧,主要要练练才能体会
    2019-07-17 22:49:28
    赞同 展开评论 打赏
  • 最优化应该是一趟排序没有发生交换就可以结束了。
    2019-07-17 22:49:28
    赞同 展开评论 打赏
  • 杀人者,打虎武松也。
    冒泡排序最多执行n-1趟,n为待排序元素个数。
    冒泡的中心思想就是比较和交换,一般可以用两层循环来实现,没有必要加上结束条件,当循环结束的时候自动回跳出。
    当然,冒泡排序会遇到这样一个问题,就是一个序列已经是有序的了,这时就可以加上结束条件,来避免不必要的比较(当然依次进行比较也是可以的,只是每次比较后都没有交换的必要了),而结束的条件就是检测某一趟比较里有没有进行交换,如果没有进行交换就直接跳出循环。

    下面是具体的程序:
    void bubblesort(int a[],int n)
    {
    int i,j;
    for(i=0;i<n-1;i++) //执行n-1趟
    {
    for(j=0;j<n-i;j++)
    {
    if(a[j]>a[j+1])
    swap(a[j],a[j+1]);
    }
    }
    }

    还有一种优化的算法,就是加上了结束条件,这种方法对于有序序列的性能将大大提升:
    void bubblesort(int a[],int n)
    {
    int i,j,last;
    i=n-1;
    while(i>0)
    {
    last=0;
    for(j=0;j<i;j++)
    {
    if(a[j+1]<a[j])
    {
    swap(a[j],a[j+1]);
    last=j;
    }
    }
    i=last;
    }
    }
    2019-07-17 22:49:28
    赞同 展开评论 打赏
滑动查看更多
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
袋鼠云基于实时计算的反黄牛算法 立即下载
Alink:基于Apache Flink的算法平台 立即下载