算法详解【冒泡排序】
来源:互联网 发布:linux下新建文件命令 编辑:程序博客网 时间:2024/06/03 16:38
一、 最简单排序实现
为什么要学习冒泡排序?
冒泡排序是经典的排序方法,思想简单,操作容易,算法稳定性好。是排序的基础算法,学习它有很大的必要性。
思想:相邻记录比较,如果逆序则交换,这样一趟排序会使最大(最小)的记录落到最后,这称之为一趟排序。N个记录需要N-1趟排序。
二、 冒泡排序算法
$arr[$k+1]) { $tmp=$arr[$k+1]; $arr[$k+1]=$arr[$k]; $arr[$k]=$tmp; } }} return $arr;} $arr=array(9,8,7,6,5,4,3);$arr = pao_sort($arr);var_dump($arr);//一次排序// 8,9,7,6,5,4,3// 8,7,9,6,5,4,3// 8,7,6,9,5,4,3// 8,7,6,5,9,4,3// 8,7,6,5,4,9,3// 8,7,6,5,4,3,9// 过程:// 8,7,6,5,4,3,9// 7,6,5,4,3,8,9// 6,5,4,3,7,8,9// 5,4,3,6,7,8,9// 4,3,5,6,7,8,9// 3,4,5,6,7,8,9//循环次数//6+5+4+3+2+1(内循环)//6(外循环)?>
三、 冒泡排序优化
我们发现当某一趟排序中没有记录发生交换,则说明记录已经有序,无需再进行后面的趟数的排序了。因此可以设置标志来标识一趟排序中是否有记录交换。
$arr[$k+1]) { $tmp=$arr[$k+1]; $arr[$k+1]=$arr[$k]; $arr[$k]=$tmp; $flag = 1; } } if($flag == 0){ //在一趟排序中没有记录交换,则停止排序 break; } } return $arr;} $arr=array(3,4,5,6,7,8,9); $arr = pao_sort($arr); //调取冒泡排序方法var_dump($arr);?>
四、 冒泡排序复杂度分析
最好的情况当记录完全有序时,只需要n次比较,发现在这一趟中没有数据交换,则排序停止,记录已经有序,时间复杂度是 O(n) 。最坏的情况当记录完全逆序的时候,n个记录要排序n-1趟,每一堂都要交换接近n次,这样最终的时间负责度O(n2) 。
对于时间复杂度我们认为最坏的情况是本算法的时间复杂度,所以冒泡排序的时间复杂度是O(n2)。
稳定性: 在排序过程中,加入有两个相同数字,在排序前后的次序未改变,因此冒泡排序是稳定排序。
因为在最坏情况下(即倒序),所有元素的比较次数总和为(0+1+…+n-1)→O(n2)。其他情况下也要考虑移动元素的次数。 故时间复杂度为O(n2)
阅读全文
0 0
- 冒泡排序算法详解
- 冒泡排序算法详解
- 算法详解【冒泡排序】
- 冒泡排序算法(排序详解)
- 【排序算法-2】冒泡排序详解
- 【算法】排序之冒泡排序详解
- js排序算法详解-冒泡排序
- 经典算法详解 之 冒泡排序
- 冒泡排序算法详解C++程序
- 冒泡排序算法详解及优化
- 简单排序算法学习笔记-冒泡排序算法详解
- java实现冒泡排序,选择排序,插入排序算法详解
- 排序算法--冒泡排序
- 排序算法-冒泡排序
- 排序算法--冒泡排序
- 排序算法--冒泡排序
- 排序算法-冒泡排序
- 排序算法 冒泡排序
- OpenCV2编程手册笔记之 2.8定义感兴趣区域(ROI)
- JavaScript 运行机制详解:Event Loop
- LeetCode· 39. Combination Sum
- new jazz music club could be a tremendously profitable enterprise
- matlab2c使用c++实现matlab函数系列教程- poly函数
- 算法详解【冒泡排序】
- Java之面向对象
- 请求网络,绘制ListView
- 1801:斜率计算
- linux内核学习笔记1
- WOJ1115-An Excel-lent Problem
- 背包问题模板
- 反转单向链表
- vb.net 教程 20-2 base64图片转换 1