堆排序之JavaScript实现
2015-10-05 16:06
579 查看
function heapAdjust(arr, pos, len) { //将pos节点的数字保存 var tmp = arr[pos]; //计算pos节点左子节点位置 var child = pos * 2 + 1; //循环,直到没有子节点 while (child < len) { //若pos节点有右子节点且右子节点较大,则用右子节点 if (child + 1 < len && arr[child] < arr[child + 1]) { child++; } //若pos节点小于较大子节点则交换并将pos定位到子节点位置 if (arr[pos] < arr[child]) { arr[pos] = arr[child]; pos = child; child = pos * 2 + 1; //将最初pos节点存到当前pos所指向的位置 arr[pos] = tmp; } else { break; } } } function heapSort(arr) { //从第一个有子节点的节点开始建堆 for (var i = arr.length / 2 - 1; i >= 0; i--) { heapAdjust(arr, i, arr.length); } //取出堆的最大值后继续构建最大堆 for (var i = arr.length - 1; i > 0; i--) { var tail = arr[i]; arr[i] = arr[0]; arr[0] = tail; //对未排序的区域继续建堆 heapAdjust(arr, 0, i); } } var arr = [3, 1, 5, 7, 2, 4, 9, 6, 10, 8]; heapSort(arr); console.log(arr);
相关文章推荐
- 关于json格式转换为.xls .mdb的终极解决方案
- [LeetCode][JavaScript]Set Matrix Zeroes
- 关于JS操作DOM的一些小细节
- JS跨域常见方案
- TypeScript与Haxe:两种截然不同的JS转译工具横向对比
- javascript实例(一)验证表单是否空白
- JS事件分析之mouseover事件与mouseenter事件?
- d3.js学习笔记(一)
- 关于 jsp内嵌网页内容
- JavaScript中的运算符
- avalonjs 中的if else实现的几种方法
- avalonjs 中的if else实现的几种方法
- JavaScript表达式计算 eval
- 用canvas写 看你有多色 游戏
- Sublime Text 3能用支持的插件推荐
- javascript之对象(二)&& 继承问题
- 谈论json - json经常使用的功能
- JavaScript动漫作品(闭幕)
- 理解JavaScript中的闭包
- AnjularJS 教程