排序算法之冒泡(一)
来源:互联网 发布:windows dns配置文件 编辑:程序博客网 时间:2024/06/07 10:11
对 [2, 7, 6, 8, 3, 10, 1, 5, 9, 4 ]排序,研究一下
- 普通算法
var count = 0;var exchange = 0;for(var i = 0; i < a.length; i++){ for(var j = i + 1; j < a.length; j++){ if(a[i] > a[j]){ var temp = a[i]; a[i] = a[j]; a[j] = temp; exchange++; } console.log("第", ++count,"次",a); }}console.log("总共交换了: ", exchange, "次");
- 结果如下:
第 1 次 [ 2, 7, 6, 8, 3, 10, 1, 5, 9, 4 ]第 2 次 [ 2, 7, 6, 8, 3, 10, 1, 5, 9, 4 ]第 3 次 [ 2, 7, 6, 8, 3, 10, 1, 5, 9, 4 ]第 4 次 [ 2, 7, 6, 8, 3, 10, 1, 5, 9, 4 ]第 5 次 [ 2, 7, 6, 8, 3, 10, 1, 5, 9, 4 ]第 6 次 [ 1, 7, 6, 8, 3, 10, 2, 5, 9, 4 ]第 7 次 [ 1, 7, 6, 8, 3, 10, 2, 5, 9, 4 ]第 8 次 [ 1, 7, 6, 8, 3, 10, 2, 5, 9, 4 ]第 9 次 [ 1, 7, 6, 8, 3, 10, 2, 5, 9, 4 ]第 10 次 [ 1, 6, 7, 8, 3, 10, 2, 5, 9, 4 ]第 11 次 [ 1, 6, 7, 8, 3, 10, 2, 5, 9, 4 ]第 12 次 [ 1, 3, 7, 8, 6, 10, 2, 5, 9, 4 ]第 13 次 [ 1, 3, 7, 8, 6, 10, 2, 5, 9, 4 ]第 14 次 [ 1, 2, 7, 8, 6, 10, 3, 5, 9, 4 ]第 15 次 [ 1, 2, 7, 8, 6, 10, 3, 5, 9, 4 ]第 16 次 [ 1, 2, 7, 8, 6, 10, 3, 5, 9, 4 ]第 17 次 [ 1, 2, 7, 8, 6, 10, 3, 5, 9, 4 ]... ...第 44 次 [ 1, 2, 3, 4, 5, 6, 7, 8, 10, 9 ]第 45 次 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]总共交换了: 21 次
缺点:把小的数“容易”放到了后面,参考第6次和第14次。交换次数过多。
- 普通算法-优化版:
var count = 0;var exchange = 0;for(var i = 0; i < a.length; i++){ for(var j = a.length-1; j > i; j--){ if(a[i] > a[j]){ var temp = a[i]; a[i] = a[j]; a[j] = temp; exchange++; } console.log("第", ++count,"次",a); }}console.log("总共交换了: ", exchange, "次");
- 结果:
第 1 次 [ 2, 7, 6, 8, 3, 10, 1, 5, 9, 4 ]第 2 次 [ 2, 7, 6, 8, 3, 10, 1, 5, 9, 4 ]第 3 次 [ 2, 7, 6, 8, 3, 10, 1, 5, 9, 4 ]第 4 次 [ 1, 7, 6, 8, 3, 10, 2, 5, 9, 4 ]第 5 次 [ 1, 7, 6, 8, 3, 10, 2, 5, 9, 4 ]第 6 次 [ 1, 7, 6, 8, 3, 10, 2, 5, 9, 4 ]第 7 次 [ 1, 7, 6, 8, 3, 10, 2, 5, 9, 4 ]第 8 次 [ 1, 7, 6, 8, 3, 10, 2, 5, 9, 4 ]第 9 次 [ 1, 7, 6, 8, 3, 10, 2, 5, 9, 4 ]第 10 次 [ 1, 4, 6, 8, 3, 10, 2, 5, 9, 7 ]第 11 次 [ 1, 4, 6, 8, 3, 10, 2, 5, 9, 7 ]第 12 次 [ 1, 4, 6, 8, 3, 10, 2, 5, 9, 7 ]第 13 次 [ 1, 2, 6, 8, 3, 10, 4, 5, 9, 7 ]第 14 次 [ 1, 2, 6, 8, 3, 10, 4, 5, 9, 7 ]第 15 次 [ 1, 2, 6, 8, 3, 10, 4, 5, 9, 7 ]第 16 次 [ 1, 2, 6, 8, 3, 10, 4, 5, 9, 7 ]第 17 次 [ 1, 2, 6, 8, 3, 10, 4, 5, 9, 7 ]... ...第 44 次 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]第 45 次 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]总共交换了: 13 次
缺点:已无法优化,虽然交换次数少了,但是循环次数永远这么多
- 冒泡算法:
- 算法思想:两个两个比较,顺序上移。
var count = 0;var exchange = 0;for(var i = 0; i < a.length; i++){ for(var j = a.length-1; j > i; j--){ if(a[j] < a[j-1]){ var temp = a[j]; a[j] = a[j-1]; a[j-1] = temp; exchange++; } console.log("第", ++count,"次",a, i, j); }}console.log("总共交换了: ", exchange, "次");
- 结果:
第 1 次 [ 2, 7, 6, 8, 3, 10, 1, 5, 4, 9 ] 0 9第 2 次 [ 2, 7, 6, 8, 3, 10, 1, 4, 5, 9 ] 0 8第 3 次 [ 2, 7, 6, 8, 3, 10, 1, 4, 5, 9 ] 0 7第 4 次 [ 2, 7, 6, 8, 3, 1, 10, 4, 5, 9 ] 0 6第 5 次 [ 2, 7, 6, 8, 1, 3, 10, 4, 5, 9 ] 0 5第 6 次 [ 2, 7, 6, 1, 8, 3, 10, 4, 5, 9 ] 0 4第 7 次 [ 2, 7, 1, 6, 8, 3, 10, 4, 5, 9 ] 0 3第 8 次 [ 2, 1, 7, 6, 8, 3, 10, 4, 5, 9 ] 0 2第 9 次 [ 1, 2, 7, 6, 8, 3, 10, 4, 5, 9 ] 0 1第 10 次 [ 1, 2, 7, 6, 8, 3, 10, 4, 5, 9 ] 1 9第 11 次 [ 1, 2, 7, 6, 8, 3, 10, 4, 5, 9 ] 1 8第 12 次 [ 1, 2, 7, 6, 8, 3, 4, 10, 5, 9 ] 1 7第 13 次 [ 1, 2, 7, 6, 8, 3, 4, 10, 5, 9 ] 1 6第 14 次 [ 1, 2, 7, 6, 3, 8, 4, 10, 5, 9 ] 1 5第 15 次 [ 1, 2, 7, 3, 6, 8, 4, 10, 5, 9 ] 1 4第 16 次 [ 1, 2, 3, 7, 6, 8, 4, 10, 5, 9 ] 1 3第 17 次 [ 1, 2, 3, 7, 6, 8, 4, 10, 5, 9 ] 1 2... ...第 31 次 [ 1, 2, 3, 4, 5, 7, 6, 8, 9, 10 ] 4 9第 32 次 [ 1, 2, 3, 4, 5, 7, 6, 8, 9, 10 ] 4 8第 33 次 [ 1, 2, 3, 4, 5, 7, 6, 8, 9, 10 ] 4 7第 34 次 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] 4 6第 35 次 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] 4 5第 36 次 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] 5 9第 37 次 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] 5 8第 38 次 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] 5 7第 39 次 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] 5 6第 40 次 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] 6 9第 41 次 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] 6 8第 42 次 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] 6 7第 43 次 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] 7 9第 44 次 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] 7 8第 45 次 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] 8 9总共交换了: 20 次
- ps: 交换次数这么多,且循环次数也没减少,要你何用!
- 从 i = 5这一轮开始,就没有了交换,这个地方可以优化一下
- 代码:
var count = 0;var exchange = 0;var flag = true;for(var i = 0; i < a.length && flag; i++){ flag = false; for(var j = a.length-1; j > i; j--){ if(a[j] < a[j-1]){ var temp = a[j]; a[j] = a[j-1]; a[j-1] = temp; flag = true; exchange++; } console.log("第", ++count,"次",a, i, j); }}console.log("总共交换了: ", exchange, "次");`
- 结果
... ...第 37 次 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] 5 8第 38 次 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] 5 7第 39 次 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] 5 6总共交换了: 20 次
阅读全文
0 0
- 排序算法之冒泡(一)
- 排序算法之——冒泡排序(一)
- 浅谈排序算法(一)之冒泡排序
- 排序算法一之冒泡排序
- 常见算法之排序一【冒泡排序】
- 数据结构<一> 排序算法之冒泡排序
- 算法学习之排序算法(一)(冒泡法)
- 算法学习之排序算法(一)(冒泡法)
- 小白聊算法(一)之冒泡排序演示图
- 一天一算法之冒泡排序
- 每日一算法之JS冒泡排序
- 排序算法(一)- 冒泡排序
- 排序算法--冒泡排序(一)
- 数据结构--排序算法(一)冒泡排序
- 排序算法(一) 冒泡排序
- Javascript数据结构算法之排序一(冒泡排序,插入排序,选择排序)
- java排序之冒泡排序(一)
- 排序(一)之冒泡排序
- 时间处理大总结之Python
- Ubuntu 16.04 LTS国内快速更新源
- numpy 多维矩阵
- python3 deque(双向队列)用法
- 程序员进阶:怎么成为一个软件架构师?
- 排序算法之冒泡(一)
- Oracle中的translate函数用法
- MySQL的常用命令
- android停止handler的办法
- 输入100以内含7或7倍数的数
- Jave基础知识
- 有关结构体指针与函数传参返回值类型的六种方法
- 软件工程师成长为架构师必备的十项技能
- 初识实时流处理