堆排序
来源:互联网 发布:陈道明和陈宝国 知乎 编辑:程序博客网 时间:2024/06/05 13:58
nodeJs实现
function heapSort (list) { if (list == undefined || list.length == 0) return; buildMaxHeap(list); for (var i = list.length - 1; i >= 0; i--) { var temp = list[0]; list[0] = list[i]; list[i] = temp; maxHeap(list, i - 1, 0); }}function buildMaxHeap (list) { if (list == undefined || list.length == 0) return; var half = list.length / 2; for (var i = half - 1; i >= 0; i--) { maxHeap(list, list.length - 1, i); }} function maxHeap (list, heapSize, index) { var left = 2 * index + 1; var right = 2 * index + 2; var largest = index; var temp; if (left <= heapSize && list[left] > list[largest]) { largest = left; } if (right <= heapSize && list[right] > list[largest]) { largest = right; } if (largest != index) { temp = list[index]; list[index] = list[largest]; list[largest] = temp; maxHeap(list, heapSize, largest); }}var nums = [3, 8, 1, 6, 5, 4, 7, 2, 9, 0];heapSort(nums);for (var i = 0; i < nums.length; i++) { console.log(nums[i]);}
Java实现
package cn.mitsuhide.javabase;public class SortAll { public static void main(String[] args) { // TODO Auto-generated method stub int [] list = {3,8,1,6,5,4,7,2,9}; SortAll sa = new SortAll(); sa.heapSort(list); for (int i = 0; i < list.length; i++) { System.out.print(list[i] + " "); } } //交换节点 public void swapItem(int a, int b, int [] list) { int t = list[a]; list[a] = list[b]; list[b] = t; } //堆排序 public void heapSort(int [] list) { buildMaxHeap(list); for (int i = list.length - 1; i >= 0; i--) { this.swapItem(i, 0, list); this.maxHeap(list, i, 0); } } //首先建立最大堆 public void buildMaxHeap(int [] list) { int begin = list.length/2 - 1; for (int i = begin; i >= 0; i--) { this.maxHeap(list, list.length, i); } } //递归调整堆 public void maxHeap(int [] list, int heapSize, int index) { int left = 2 * index + 1; int right = 2 * index + 2; int largest = index; if (left < heapSize && list[left] > list[largest]) { largest = left; } if (right < heapSize && list[right] > list[largest]) { largest = right; } if (largest != index) { this.swapItem(largest, index, list); maxHeap(list, heapSize, largest); } }}
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- 206. Reverse Linked List
- Ubuntu install Redis
- 129.View the Exhibits and examine the structures of the PROMOTIONS and SALES tables.
- UNICODE下CString 和 const char* 的相互转化
- 加油,启程!
- 堆排序
- TCP连接建立断开
- 算法训练 最大最小公倍数
- no matching provisioning profile found
- 抽象工厂模式
- 【Github教程】史上最全github使用方法:github入门到精通
- SQL Server 触发器
- 快速排序
- vi使用方法