2.冒泡算法的优化

1.冒泡算法

抱歉。上个版本的文章确实有很大问题,大家的回复颠覆了我对冒泡排序的想法,在此谢谢大家。有个热心观众写的比我好些,他写了三种很好的优化方法。传送门

  • 所谓冒泡算法(Bubble)就是每次找出最大(小)的值,将其放到最后,然后再对剩余的数进行重复操作。
    第一个for循环:排除最后一个或几个已经排序好的数。a.length-1是因为数组从0开始。
    第二个for循环:找出剩余的数里的最大(小),放在最后。减去i,是为了排除已经排序好的元素。
    代码如下:
for(inti=0;i<a.length-1;i++){
for(intj=0;j<a.length-1-i;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}

时间复杂度为O(n^2),太高了。

2.一层优化

  • 但是还是不够,因为有时候我们冒泡排序时,可能已经排好了,任然还在比较。这时候就需要一个flag进行判定。是否已经排好了,如果排好了就不进比较了。
int a[n];
int t;//交换容器
bool flag=true;//判定
for(inti=0;i<a.length-1;i++){
        flag=false;
for(intj=0;j<a.length-1-i;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
            flag=true;
}
}
}
       if(!flag){
          break;
       }
}

这样子就会效率很多。

3.最后结论

冒泡算法简单但并不好,主要是时间复杂度太高。

疑问:

int a[n];
int t;//交换容器
for (int i = 0; i < n; i++) {
    for (int j = i+1; j < n; j++) {
        if (a[i] > a[j]) {
            t = a[j];
            a[j] = a[i];
            a[i] = t;
        }
    }
}
  • 这种算法是什么排序呢?有没有热心观众解答一下。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 10,601评论 0 52
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 9,092评论 0 15
  • 总结一下常见的排序算法。 排序分内排序和外排序。内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序...
    jiangliang阅读 5,248评论 0 1
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 5,031评论 0 2
  • 其实最先写这篇读后感我是拒绝的,因为关于健康的书看多了,感觉都差不多,但当我回过头来翻看的时候,发现这本书有很多的...
    什么都值得阅读 1,796评论 0 1

友情链接更多精彩内容