复杂排序---堆排序
2023-02-18 16:39:31 时间
function heapSort(array) {
function swap(array, i, j) {
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
function maxHeapify(array, index, heapSize) {
var iMax,
iLeft,
iRight;
while (true) {
iMax = index;
iLeft = 2 * index + 1;
iRight = 2 * (index + 1);
if (iLeft < heapSize && array[index] < array[iLeft]) {
iMax = iLeft;
}
if (iRight < heapSize && array[iMax] < array[iRight]) {
iMax = iRight;
}
if (iMax != index) {
swap(array, iMax, index);
index = iMax;
} else {
break;
}
}
}
function buildMaxHeap(array) {
var i,
iParent = Math.floor(array.length / 2) - 1;
for (i = iParent; i >= 0; i--) {
maxHeapify(array, i, array.length);
}
}
function sort(array) {
buildMaxHeap(array);
for (var i = array.length - 1; i > 0; i--) {
swap(array, 0, i);
maxHeapify(array, 0, i);
}
return array;
}
return sort(array);
}
相关文章
- Java基础系列(30)- 命令行传参
- Java基础系列(29)- 方法的重载
- Java基础系列(28)- 方法的定义和调用
- Java基础系列(27)- 什么是方法
- Java基础系列(26)- 打印三角形
- Java基础系列(24)- 增强for循环
- Java基础系列(23)- 打印九九乘法表
- Java基础系列(22)- For循环详解
- 聊聊Java的异常机制问题
- Java基础系列(21)- dowhile循环
- Java基础系列(20)- while循环
- Java基础系列(19)- Switch结构
- Java基础系列(18)- if选择结构
- Java基础系列(17)- 顺序结构
- Java基础系列(16)- Scanner进阶使用
- Java基础系列(15)- 用户交互Scanner
- Java基础系列(14)- JavaDoc生成文档
- Java基础系列(13)- 包机制
- Java基础系列(12)- 运算符
- Java基础系列(11)- 变量、常量、作用域以及变量的命名规范