JavaScript 冒泡排序
来源:互联网 发布:李俊峰的霍去病 知乎 编辑:程序博客网 时间:2024/06/14 20:41
1.从首部开始,将最大值向后移动
function bubbleSort1(arr) { for(var i = 0; i < arr.length - 1; i++){ for(var j = 0; j < arr.length - i - 1; j++){ if(arr[j] > arr[j+1]){ var tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; } } }}
数据轨迹 : 初始值[4,2,3,1,9,7,8,5,6]
内循环每次只比较并交换两个元素.
上面的写法的外循环每次步进总是将最大的一个元素放到末尾,可看成向后冒泡.
要想向前冒泡,外循环每次步进总是把最小的元素放到头部,可以这么写
2.从首部开始,将最小值想首部移动
function bubbleSort2(arr) { for(var i = 0; i < arr.length; i++){ for(var j = i + 1; j < arr.length; j++){ if(arr[i] > arr[j]){ var tmp = arr[j]; arr[j] = arr[i]; arr[i] = tmp; } } }}
数据轨迹 : 初始值[4,2,3,1,9,7,8,5,6]
向前冒泡可以保证前面指定位置是有序的,向后冒泡,则反之
从尾部开始,将最小值向前移动
function bubbleSort3(arr){ for(i= 0; i < arr.length; i++){ for(var j = arr.length - 1; j > i; j--){ if(arr[j] < arr[j-1]){ var temp = arr[j]; arr[j] = arr[j-1]; arr[j-1] = temp; } } }}
问题:上面的所有排序方法在时间复杂度上,最差的情况是O(n^2),最好的情况也是O(n^2)
原因:排序到一半发现数组已经有序,但排序仍在继续
可以设置标记unordered,如果再一次内循环中数组没有发生一次交换(即数组已然有序),
可以将unordered设置为false,这样最好的情况可以是O(n)
function sort(arr) { var unordered = true; for(var i = 0; i < arr.length - 1 && unordered; i++){ unordered = false; for(var j = 0; j < arr.length - i - 1; j++){ if(arr[j] > arr[j+1]){ var tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; unordered = true; } } }}
也可以看到优化后排序算法,向后排序和向前排序所用的循环次数是不同的
阅读全文
0 0
- javascript冒泡排序
- Javascript 冒泡排序
- Javascript实现冒泡排序
- javascript数组冒泡排序
- javascript冒泡排序
- javascript冒泡排序
- Javascript冒泡排序
- javascript 冒泡排序
- JavaScript数组冒泡排序
- JavaScript冒泡排序算法
- javascript冒泡排序
- JavaScript 冒泡排序
- 冒泡排序-javascript
- javascript冒泡排序
- javascript--冒泡排序
- javascript实现冒泡排序
- javascript冒泡排序
- JavaScript 冒泡排序
- 真假全网通之争:保障消费者权益不容玩花样
- 对称加密,非对称加密,信息摘要算法的区别和联系
- 用C++实现顺序表
- MVC模式登陸例子
- 52数学能力测评各年级高错误率难题讲解
- JavaScript 冒泡排序
- 各种注解的使用
- Python assert
- HTML5-拖放
- Ubuntu 14.04 更换源
- 小练手理工大学官网HTML+CSS
- [BZOJ 1833] count 数字计数 数位DP(附数位DP总结)
- iscroll5
- 可以回跳的台阶跳