排序算法之冒泡排序
2016-08-18 11:58
204 查看
冒泡排序经典的排序算法,实现的思想是通过两两相邻的元素比较,使较大的数字不断向队列上部浮动,就如同水里的一个气泡一般不断向上浮,所以才得到一个"冒泡排序"好听的名字。
![](http://s4.51cto.com/wyfs02/M01/86/1B/wKioL1e1LP2hXdsiAACp2m90VC4671.png-wh_500x0-wm_3-wmp_4-s_3804986018.png)
图片转载
那接下来我通过一个小例子来看看冒泡排序的实现:
因为冒泡排序是两两相邻比较,所以
但是这个没经优化的冒泡排序的时间复杂度是O(N2)。
优化的思想就是:如果数组中某个元素到最后一个元素是已经排好序的,那么这段数据就不需要进行比较并排序了。
代码如下:
![](http://s4.51cto.com/wyfs02/M01/86/1B/wKioL1e1LP2hXdsiAACp2m90VC4671.png-wh_500x0-wm_3-wmp_4-s_3804986018.png)
图片转载
那接下来我通过一个小例子来看看冒泡排序的实现:
[7,4,1,8,2]上面的数组实现从小到大排序。
因为冒泡排序是两两相邻比较,所以
step1 7与4比较,7>4,交换位置后得数组:[4,7,1,8,2] step2 7与1比较,7>1,交换位置后得数组:[4,1,7,8,2] step3 7与8比较,7<8,不进行交换得数组:[4,1,7,8,2] step4 8与2比较,8>2,交换位置后得数组:[4,1,7,2,8]至此第一轮冒泡结束,我们看到数组中元素最大的8已经到了最后,这就是经过一轮冒泡,最大的元素已经浮动到最上面。之后只要重复这4个步骤就可以了。
但是这个没经优化的冒泡排序的时间复杂度是O(N2)。
优化的思想就是:如果数组中某个元素到最后一个元素是已经排好序的,那么这段数据就不需要进行比较并排序了。
[2,1,4,5,6,7,8]像这个数组中,[4,5,6,7,8]是已经排好序的,只需要排[2,1]就ok。
代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>冒泡排序</title> <script type="text/javascript"> function myclick(){ var value = document.getElementById("sort_array").value; var array = value.split(","); document.getElementById("echo_array").value = mysort(array).toString(); } //排序算法 function mysort(arr){ var i,flag = 1,temp,j=arr.length; while(flag){ flag = 0;//每次数组的循环之前置为0 for(i=1;i<j;i++){ if(parseInt(arr[i])>parseInt(arr[i-1])){ temp = arr[i]; arr[i] = arr[i-1]; arr[i-1] = temp; flag = 1;//标志位,如果有交换则置为1 } } j = i;//记录最后一次交换的数组下标 } return arr; } </script> <style type="text/css"> input{ width: 300px; } </style> </head> <body> <label>请输入待排序的数字,用逗号隔开:</label><input type="text" id="sort_array"/> <label>请输入待排序的数字,用逗号隔开:</label><input type="text" id="echo_array"/> <input type="button" value="排序" onclick="myclick()"/> </body> </html>这样经过优化过的算法最好的时间复杂度是O(n),最坏的情况下还是O(N2)
相关文章推荐
- 【排序算法-2】冒泡排序详解
- 排序算法之二---冒泡排序
- 排序算法--冒泡排序的首尾改进
- 排序算法合集(插入排序,折半插入排序,希尔排序,冒泡排序,快速排序,简单选择排序,堆排序,归并排序)
- 排序算法--冒泡排序(一)
- 排序算法之冒泡排序
- 对一组随机生成数进行几种常用排序算法的分析设计和实现之一 ——冒泡排序
- 基础:排序算法(一)冒泡排序
- 排序算法_冒泡排序
- 排序算法---冒泡排序
- 排序算法(一)冒泡排序
- 排序算法(二)冒泡排序
- 排序算法(快速排序,冒泡排序,插入排序,堆排序)
- 排序算法1 ——冒泡排序
- 常见的五类排序算法图解和实现(交换类:冒泡排序,递归的快速排序)
- 【手写排序算法及优化】冒泡排序
- 排序算法基础篇交换排序之冒泡排序
- 排序算法-冒泡排序
- 排序算法-09-冒泡排序(Bubble Sort)
- 常用的排序算法(包括冒泡排序,选择排序,插入排序,希