博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
冒泡排序
阅读量:2192 次
发布时间:2019-05-02

本文共 976 字,大约阅读时间需要 3 分钟。

冒泡排序是非常容易理解和实现,,以从小到大排序举例:

设为N。

比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个。

2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。

3.N=N-1,如果N不为0就重复前面二步,否则排序完成。

 

按照定义很容易写出代码:

[cpp] 
  1. //冒泡排序1  
  2. void BubbleSort1(int a[], int n)  
  3. {  
  4.        int i, j;  
  5.        for (i = 0; i < n; i++)  
  6.               for (j = 1; j < n - i; j++)  
  7.                      if (a[j - 1] > a[j])  
  8.                             Swap(a[j - 1], a[j]);  
  9. }  

下面对其进行优化,设置一个标志,如果这一趟发生了交换,则为true,否则为false。明显如果有一趟没有发生交换,说明排序已经完成。

[cpp] 
  1.   
[cpp] 
  1. //冒泡排序2  
  2. void BubbleSort2(int a[], int n)  
  3. {  
  4.        int j, k;  
  5.        bool flag;  
  6.   
  7.        k = n;  
  8.        flag = true;  
  9.        while (flag)  
  10.        {  
  11.               flag = false;  
  12.               for (j = 1; j < k; j++)  
  13.                      if (a[j - 1] > a[j])  
  14.                      {  
  15.                             Swap(a[j - 1], a[j]);  
  16.                             flag = true;  
  17.                      }  
  18.               k--;  
  19.        }  
  20. }  

再做进一步的优化。如果有100个数的数组,仅前面10个无序,后面90个都已排好序且都大于前面10个数字,那么在第一趟遍历后,最后发生交换的位置必定小于10,且这个位置之后的数据必定已经有序了,记录下这位置,第二次只要从数组头部遍历到这个位置就可以了。

[cpp] 
  1. //冒泡排序3  
  2. void BubbleSort3(int a[], int n)  
  3. {  
  4.     int j, k;  
  5.     int flag;  
  6.       
  7.     flag = n;  
  8.     while (flag > 0)  
  9.     {  
  10.         k = flag;  
  11.         flag = 0;  
  12.         for (j = 1; j < k; j++)  
  13.             if (a[j - 1] > a[j])  
  14.             {  
  15.                 Swap(a[j - 1], a[j]);  
  16.                 flag = j;  
  17.             }  
  18.     }  
  19. }  

冒泡排序毕竟是一种效率低下的,在数据规模很小时,可以采用。数据规模比较大时,最好用其它排序方法。

转载地址:http://aixkb.baihongyu.com/

你可能感兴趣的文章
搞懂分布式技术12:分布式ID生成方案
查看>>
搞懂分布式技术13:缓存的那些事
查看>>
搞懂分布式技术14:Spring Boot使用注解集成Redis缓存
查看>>
搞懂分布式技术15:缓存更新的套路
查看>>
搞懂分布式技术16:浅谈分布式锁的几种方案
查看>>
搞懂分布式技术17:浅析分布式事务
查看>>
搞懂分布式技术18:分布式事务常用解决方案
查看>>
搞懂分布式技术19:使用RocketMQ事务消息解决分布式事务
查看>>
搞懂分布式技术20:消息队列因何而生
查看>>
搞懂分布式技术21:浅谈分布式消息技术 Kafka
查看>>
后端技术杂谈1:搜索引擎基础倒排索引
查看>>
后端技术杂谈2:搜索引擎工作原理
查看>>
后端技术杂谈3:Lucene基础原理与实践
查看>>
后端技术杂谈4:Elasticsearch与solr入门实践
查看>>
后端技术杂谈5:云计算的前世今生
查看>>
后端技术杂谈6:白话虚拟化技术
查看>>
后端技术杂谈7:OpenStack的基石KVM
查看>>
后端技术杂谈8:OpenStack架构设计
查看>>
后端技术杂谈9:先搞懂Docker核心概念吧
查看>>
后端技术杂谈10:Docker 核心技术与实现原理
查看>>