堆排序算法
来源:互联网 发布:手机控制电脑 python 编辑:程序博客网 时间:2024/06/05 19:54
堆排序,是利用堆的性质进行一种选择排序
堆,其实是一棵完全二叉树。(任何一非叶节点的关键字,不大于或者不小于其左右孩子节点的关键字)
堆分为大顶堆 和 小顶堆:大于等于为大顶堆。小于等于 为 小顶堆
大顶堆,堆顶记录是最大关键字。小顶堆,堆顶记录是最小关键字。
1.将 带排序的关键字(1~n),构成大顶堆,此时为初始无序区。
2.将堆顶元素(1)与最后一个元素(n)交换。n就是最大值,进入有序区。 此时的无序区为,1~n-1。
3.无序区,因为交换,可能违反堆的性质。将其调整为新堆。再将第一个与最后一个交换。
构造初始堆,和调整堆。是主要2个步骤。
我们来对 x[] = {15,7,5,20,17,8};进行堆排序
public class HeapSort {public static void main(String[] args) {int[] array = { 15,7,5,20,17,8 };System.out.println("Before heap:");ArrayUtils.printArray(array);heapSort(array);System.out.println("After heap sort:");ArrayUtils.printArray(array);}public static void heapSort(int[] array) {if (array == null || array.length <= 1) {return;}buildMaxHeap(array);for (int i = array.length - 1; i >= 1; i--) {ArrayUtils.exchangeElements(array, 0, i);maxHeap(array, i, 0);}}private static void buildMaxHeap(int[] array) {if (array == null || array.length <= 1) {return;}int half = array.length / 2;for (int i = half; i >= 0; i--) {maxHeap(array, array.length, i);}}private static void maxHeap(int[] array, int heapSize, int index) {int left = index * 2 + 1;int right = index * 2 + 2;int largest = index;if (left < heapSize && array[left] > array[index]) {largest = left;}if (right < heapSize && array[right] > array[largest]) {largest = right;}if (index != largest) {ArrayUtils.exchangeElements(array, index, largest);maxHeap(array, heapSize, largest);}}}
阅读全文
0 0
- 排序算法--堆排序
- 排序算法-堆排序
- 排序算法---堆排序
- 【排序算法】堆排序
- 排序算法-堆排序
- 排序算法---堆排序
- 排序算法--堆排序
- 排序算法----堆排序
- 排序算法--堆排序
- 排序算法 堆排序
- 排序算法-堆排序
- 排序算法:堆排序
- 排序算法---堆排序
- 【排序算法】堆排序
- 排序算法:堆排序
- 排序算法-堆排序
- 排序算法:堆排序
- 排序算法-堆排序
- pipline
- Android的内存泄漏分析
- eclipse 远程debug project
- spring生命周期
- SystemCare PRO4. 2新版(优化胜过360、无后门、系统清理加速、无需注册)完美破解
- 堆排序算法
- 51nod 1027 大数乘法
- C语言(25)士兵杀敌1
- oracle sys/system账户登录
- IAR6.x升级到IAR7.x在引导文件出现的Warning
- IAR 调试出现“program exit reached"
- mysql audit 执行流程
- 关系代数 (关系模型)
- CDH搭建hadoop集群