排序算法之冒泡排序
2017-10-27 14:23
274 查看
冒泡排序(Bubble Sort)是七大经典排序算法之一,其算法的主要思想是比较相邻的两个元素,按照从小到大(或从大到小)的顺序进行交换,一次排序后最大数(或最小数)会到最后一个,重复循环直到排序完成。
冒泡排序的时间复杂度最好为O(n), 最坏为O(n2), 平均时间复杂度为O(n2)。
冒泡排序是一种稳定的排序算法。(稳定是指相同元素的前后顺序在排序后保持不变)
举个栗子:
原数组为: 89 37 23 4 54 17 49 , 数组长度为7,需要进行的排序次数为7-1=6次。
第一次排序, 取数组第1个值与数据第2个值比较,第1个值(89)大于第2个值(37),交换第1个值与第2个值:
前:89 37 23 4 54 17 49
后:37 89 23 4 54 17 49
第一次排序, 取数组第2个值与数据第3个值比较,第2个值(89)大于第3个值(23),交换第2个值与第3个值:
前:37 89 23 4 54 17 49
后:37 23 89 4 54 17 49
第一次排序, 取数组第3个值与数据第4个值比较,第3个值(89)大于第4个值(4),交换第3个值与第4个值:
前:37 23 89 4 54 17 49
后:37 23 4 89 54 17 49
第一次排序, 取数组第4个值与数据第5个值比较,第4个值(89)大于第5个值(54),交换第4个值与第5个值:
前:37 23 4 89 54 17 49
后:37 23 4 54 89 17 49
第一次排序, 取数组第5个值与数据第6个值比较,第5个值(89)大于第6个值(17),交换第5个值与第6个值:
前:37 23 4 54 89 17 49
后:37 23 4 54 17 89 49
第一次排序, 取数组第6个值与数据第7个值比较,第6个值(89)大于第7个值(49),交换第6个值与第7个值:
前:37 23 4 54 17 89 49
后:37 23 4 54 17 49 89
第一次排序结束后,89作为最大值排到最后,其它元素像气泡一样上升。
第二次排序,89已经排好不再参与排序
前:3723 4 54 17 49 89
1-->23 37 4 54 17 49 89
2-->23 4 37 54 17 49 89
3-->23 4 37 54 17 49 89
4-->23 4 37 17 54 49 89
5-->23 4 37 17 49 54 89
第三次排序,54、89不再参与排序
前:23 4 37 17 49 54 89
1-->4 23 37 17 49 54 89
2-->4 23 37 17 49 54 89
3-->4 23 17 37 49 54 89
4-->4 23 17 37 49 54 89
第四次排序,49、54、89不再参与排序
前:4 23 17 37 49 54 89
1-->4 23 17 37 49 54 89
2-->4 17 23 37 49 54 89
3-->4 17 23 37 49 54 89
第五次排序,37、49、54、89不再参与排序
前:4 17 23 37 49 54 89
1-->4 17 23 37 49 54 89
2-->4 17 23 37 49 54 89
第六次排序,23、37、49、54、89不再参与排序
前:4 17 23 37 49 54 89
1-->4 17 23 37 49 54 89
最终排序为: 4 17 23 37 49 54 89
C:
PHP:
Python:
冒泡排序的时间复杂度最好为O(n), 最坏为O(n2), 平均时间复杂度为O(n2)。
冒泡排序是一种稳定的排序算法。(稳定是指相同元素的前后顺序在排序后保持不变)
举个栗子:
原数组为: 89 37 23 4 54 17 49 , 数组长度为7,需要进行的排序次数为7-1=6次。
第一次排序, 取数组第1个值与数据第2个值比较,第1个值(89)大于第2个值(37),交换第1个值与第2个值:
前:89 37 23 4 54 17 49
后:37 89 23 4 54 17 49
第一次排序, 取数组第2个值与数据第3个值比较,第2个值(89)大于第3个值(23),交换第2个值与第3个值:
前:37 89 23 4 54 17 49
后:37 23 89 4 54 17 49
第一次排序, 取数组第3个值与数据第4个值比较,第3个值(89)大于第4个值(4),交换第3个值与第4个值:
前:37 23 89 4 54 17 49
后:37 23 4 89 54 17 49
第一次排序, 取数组第4个值与数据第5个值比较,第4个值(89)大于第5个值(54),交换第4个值与第5个值:
前:37 23 4 89 54 17 49
后:37 23 4 54 89 17 49
第一次排序, 取数组第5个值与数据第6个值比较,第5个值(89)大于第6个值(17),交换第5个值与第6个值:
前:37 23 4 54 89 17 49
后:37 23 4 54 17 89 49
第一次排序, 取数组第6个值与数据第7个值比较,第6个值(89)大于第7个值(49),交换第6个值与第7个值:
前:37 23 4 54 17 89 49
后:37 23 4 54 17 49 89
第一次排序结束后,89作为最大值排到最后,其它元素像气泡一样上升。
第二次排序,89已经排好不再参与排序
前:3723 4 54 17 49 89
1-->23 37 4 54 17 49 89
2-->23 4 37 54 17 49 89
3-->23 4 37 54 17 49 89
4-->23 4 37 17 54 49 89
5-->23 4 37 17 49 54 89
第三次排序,54、89不再参与排序
前:23 4 37 17 49 54 89
1-->4 23 37 17 49 54 89
2-->4 23 37 17 49 54 89
3-->4 23 17 37 49 54 89
4-->4 23 17 37 49 54 89
第四次排序,49、54、89不再参与排序
前:4 23 17 37 49 54 89
1-->4 23 17 37 49 54 89
2-->4 17 23 37 49 54 89
3-->4 17 23 37 49 54 89
第五次排序,37、49、54、89不再参与排序
前:4 17 23 37 49 54 89
1-->4 17 23 37 49 54 89
2-->4 17 23 37 49 54 89
第六次排序,23、37、49、54、89不再参与排序
前:4 17 23 37 49 54 89
1-->4 17 23 37 49 54 89
最终排序为: 4 17 23 37 49 54 89
C:
//冒泡排序, 按从小到大排序 void bubble_sort(int array[], int len) { //array是待排序的数组, len是数组的长度 for(int i=0; i<len-1; i++) { //需要重复排序的次数 for(int j=0; j<len-1-i; j++) { //从数组的第一个位置开始取值,陆续比较相邻的元素,已经在末尾排好的不再参与排序 if(array[j] > array[j+1]) { //比较取出的两个相邻的数值的大小,如果第一个值大则进行数值交换 int temp = array[j]; //将大数值赋值给临时变量 array[j] = array[j+1]; //将小数值赋值给原数组中大数值的位置 array[j+1] = temp; //将大数值赋值给原数组中小数值的位置 } } } }
PHP:
function bubbleSort(array $array) { $len = count($array); for($i=0; $i<$len-1; $i++) { for($j=0; $j<$len-1-$i; $j++) { if($array[$j] > $array[$j+1]) { $temp = $array[$j]; $array[$j] = $array[$j+1]; $array[$j+1] = $temp; } } } }
Python:
def bubbleSort(array=None): //array是list类型 if array is None: return length = len(array) for i in range(length - 1): for j in range(length - 1 - i): if array[j] > array[j+1]: array[j], array[j+1] = array[j+1], array[j]
相关文章推荐
- 常用的排序算法(包括冒泡排序,选择排序,插入排序,希
- 排序算法-冒泡排序
- 经常使用排序算法实现[交换排序之冒泡排序、高速排序]
- 排序算法之冒泡排序
- 排序算法之冒泡排序
- 【学习总结】Java中最常用的三大排序算法-冒泡排序、选择排序、插入排序
- 经典排序算法(一)--冒泡排序、快速排序java实现
- 排序算法之冒泡排序
- 排序算法之冒泡排序
- 经典排序算法 - 冒泡排序
- 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序
- 排序算法(三)交换类排序:冒泡排序和快速排序
- 排序算法之冒泡排序
- 【排序算法】冒泡排序 bubble sort(交换类排序)
- 排序算法之冒泡排序
- 排序算法——冒泡排序
- JAVA中排序算法(冒泡排序、选择排序、插入排序、快速排序)
- 排序算法--冒泡排序(一)
- 排序算法之冒泡排序
- 排序算法--冒泡排序