数据结构--冒泡排序
2016-12-19 22:20
204 查看
起泡排序的过程很简单。
首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换之,然后比较第二个记录和第三个记录的关键字。依次类推,直至第n-1个记录和第n个记录的关键字进行比较为止。
上述过程称作第一趟起泡排序,其结果使得关键字最大的记录被安置到最后一个记录的位置上。然后进行第二趟起泡排序,对前n-1个记录进行同样操作,其结果是使关键字次大的记录被安置到第n-1个记录的位置上。
一般地,第i趟起泡排序是从r[1]到r[n-i+1]依次比较相邻两个记录的关键字,并在逆序时交换相邻记录,其结果是这n-i+1个记录中关键字最大的记录被交换到第n-i+1的位置上。
整个排序过程需进行k(1<=k< n)趟起泡排序。
显然,判别起泡排序结束的条件应该是“在一趟排序过程中没有进行过交换记录的操作”。我们将通过设立一个bool类型变量来判断结束条件。
其算法如下
(1)冒泡排序的最好时间复杂度O(n)
(2)冒泡排序的最坏时间复杂度为O(n^2)
(3)冒泡排序的平均时间复杂度为O(n^2)
(4)算法稳定性:稳定的
首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换之,然后比较第二个记录和第三个记录的关键字。依次类推,直至第n-1个记录和第n个记录的关键字进行比较为止。
上述过程称作第一趟起泡排序,其结果使得关键字最大的记录被安置到最后一个记录的位置上。然后进行第二趟起泡排序,对前n-1个记录进行同样操作,其结果是使关键字次大的记录被安置到第n-1个记录的位置上。
一般地,第i趟起泡排序是从r[1]到r[n-i+1]依次比较相邻两个记录的关键字,并在逆序时交换相邻记录,其结果是这n-i+1个记录中关键字最大的记录被交换到第n-i+1的位置上。
整个排序过程需进行k(1<=k< n)趟起泡排序。
显然,判别起泡排序结束的条件应该是“在一趟排序过程中没有进行过交换记录的操作”。我们将通过设立一个bool类型变量来判断结束条件。
其算法如下
void BubbleSort(int r[],int size) { int i,j,temp; bool exchange; //交换标志 for(i=0;i<size;i++) { exchange=false; //本趟排序开始前,交换标志设为假 for(j=size-1;j>=i;--j) if(r[j+1]<r[j]) { temp=r[j+1]; //暂存单元 r[j+1]=r[j]; r[j]=temp; exchange=true; //发生了交换,故将交换标志置为真 } if(!exchange) //本趟没有发生交换,提前终止算法 return ; } }
(1)冒泡排序的最好时间复杂度O(n)
(2)冒泡排序的最坏时间复杂度为O(n^2)
(3)冒泡排序的平均时间复杂度为O(n^2)
(4)算法稳定性:稳定的
相关文章推荐
- python数据结构之冒泡排序
- 数据结构 - 冒泡排序
- 冒泡排序代码,来自邓俊辉的数据结构C++版
- c#数据结构--冒泡排序
- 数据结构-冒泡排序与选择排序
- [py]数据结构和算法-冒泡排序
- 我---对‘数据结构’中‘排序’的理解 ---------1:冒泡排序
- 链表的冒泡排序(第10章:基本数据结构)
- 数据结构-冒泡排序
- 【数据结构】排序算法(一)之直接插入排序,冒泡排序
- 数据结构排序-交换排序-冒泡排序
- 算法与数据结构——排序(二)冒泡排序(中)
- 【数据结构和算法那些事】--【1】--冒泡排序
- 笔试,面试,C/C++,数据结构单链表排序(改进冒泡排序)
- java数据结构排序之冒泡排序
- 关于数据结构中冒泡排序和选择排序的总结
- PHP数据结构基本算法一:矩阵转置 求素数 冒泡排序 选择排序
- 【数据结构】排序算法(一)之直接插入排序,冒泡排序
- 数据结构和算法-002 数组排序 冒泡排序
- [数据结构]冒泡排序