(排序)冒泡排序的三种实现
2015-04-25 20:02
183 查看
主要内容:
1、冒泡排序
2、冒泡排序实现1
3、冒泡排序实现2
4、冒泡排序实现3
1、算法需要对数组遍历n-1遍;
2、在每一次遍历中,比较前后相邻元素的大小,如果第一个比第二个大,则交换他们,这样第一次遍历之后数组最后一个值就是最大值;
3、依次重复上面的步骤,就可以得到升序排序的数组。
复杂度分析:
最差时间复杂度(数组从大到小,交换次数):(n-1)+(n-2)+……+1=n*(n-1)/2=O(n^2)
最好时间复杂度(数组从小到大,交换次数):0
1、冒泡排序
2、冒泡排序实现1
3、冒泡排序实现2
4、冒泡排序实现3
一、冒泡排序的原理
冒泡排序是简单的一种排序方法,效率低下,复杂度为O(n^2),其具体的算法流程如下:1、算法需要对数组遍历n-1遍;
2、在每一次遍历中,比较前后相邻元素的大小,如果第一个比第二个大,则交换他们,这样第一次遍历之后数组最后一个值就是最大值;
3、依次重复上面的步骤,就可以得到升序排序的数组。
复杂度分析:
最差时间复杂度(数组从大到小,交换次数):(n-1)+(n-2)+……+1=n*(n-1)/2=O(n^2)
最好时间复杂度(数组从小到大,交换次数):0
二、冒泡排序的实现1
如上述原理:// naive bubbleSort void bubbleSort1(int a[],int n){ int tmp; for(int i=1;i<=n-1;i++){ for(int j=0;j<n-i;j++){ if(a[j]>a[j+1]){ tmp=a[j]; a[j]=a[j+1]; a[j+1]=tmp; } } } }
三、冒泡排序的实现2
设置一个标识,如果在某一趟遍历中没有发生交换,说明排序已经完成,即算法完成。// set flag to indicate which step to stop void bubbleSort2(int a[],int n){ int tmp; bool change=true; for(int i=1;i<=n-1 && change;i++){ change=false; for(int j=0;j<n-i;j++){ if(a[j]>a[j+1]){ tmp=a[j]; a[j]=a[j+1]; a[j+1]=tmp; change=true; } } } }
四、冒泡排序的实现3
如果数组有100个数,仅前面10个无序,后面90个有序,那么第一趟遍历后,最后发生交换的位置必定小于10,记录下这个位置,第二次遍历只需要从数组头部遍历到这个位置即可。// set flag to indicate what next step should begin from void bubbleSort3(int a[],int n){ int tmp; bool change=true; int flag=n-1; int k; for(int i=1;i<=n-1 && change;i++){ change=false; k=flag; for(int j=0;j<k;j++){ if(a[j]>a[j+1]){ tmp=a[j]; a[j]=a[j+1]; a[j+1]=tmp; change=true; flag=j; } } } }
相关文章推荐
- 排序算法之一 —— 冒泡排序的三种实现
- 三种简单排序的实现(冒泡排序,选择排序,插入排序 )
- 菜鸟学编程之三:三种最基本排序算法的实现(冒泡排序、选择排序、直接插入排序)
- js实现常见的三种排序方法(冒泡排序、快速排序、归并排序)
- 三种简单排序用java实现(选择排序,冒泡排序,插入排序)
- Java 实现三种简单排序——选择排序、插入排序、冒泡排序
- 数据结构与算法——三种基础排序算法C#实现(冒泡排序、选择排序、插入排序)
- java实现三种简单排序以及改良:冒泡排序,选择排序,直接插入排序
- Javascript实现三种排序:冒泡排序、选择排序、插入排序
- c# list排序的三种实现方式 (转帖)
- 直接插入排序的三种实现
- JavaScript实现经典排序算法之冒泡排序
- 直接插入排序、折半插入排序、冒泡排序、快速排序的算法实现
- 快速排序和冒泡排序的时间复杂度分析(C++算法实现对比)
- 用JS实现冒泡排序、顺序排序、 折半查找
- C++实现冒泡排序,选择排序,插入排序,快速排序,归并排序
- 直接插入排序三种实现
- C语言实现选择排序、冒泡排序和快速排序的代码示例
- 白话经典算法系列之二 直接插入排序的三种实现
- 白话经典算法系列之一 冒泡排序的三种实现