堆排序之Java实现
来源:互联网 发布:忆江南的知作者怎么写 编辑:程序博客网 时间:2024/06/16 13:38
堆排序思想
- 堆是一种重要的数组结构,为一棵完全二叉树。
- 堆排序就是利用“堆”这种数据结构对数组排序。
代码参考
工具类:
public class Util { public static void printArray(int[] array){ System.out.print("{"); for(int i = 0;i<array.length;i++){ System.out.print(array[i]); if(i<array.length - 1){ System.out.print(", "); } } System.out.println("}"); } public static void exchangeElements(int[] array,int index1,int index2){ int temp = array[index1]; array[index1] = array[index2]; array[index2] = temp; }}
具体实现类:
/* * 1.构建最大堆 * 2.选择项,并与第0位置元素交换 * 3.由于步骤2的交换可能破坏了最大堆的性质,第0不再是最大元素,需要调用maxHeap调整堆(沉降法),如果需要重复步骤2 * */public class HeapSort { public static void main(String[] args) { int[] array = {50,10,90,30,70,40,80,60,20}; System.out.println("Before Heap:"); Util.printArray(array); headSort(array); System.out.println("After Heap:"); Util.printArray(array); } public static void headSort(int[] array){ if(array == null || array.length <=1){ return; } buildMaxHeap(array);//构造最大堆 Util.printArray(array); for(int i = array.length-1;i>=1;i--){ Util.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){ Util.exchangeElements(array, index, largest); maxHeap(array, heapSize, largest); } }}
如有疑问可以参考《大话数据结构》
0 0
- 堆排序之Java实现
- 堆排序之Java实现
- 堆排序之java实现
- 堆排序之Java实现
- 堆排序之java实现
- 选择排序之堆排序Java实现
- Java实现排序算法之堆排序
- java实现排序算法之堆排序
- 排序算法之堆排序java实现
- 排序算法之堆排序 Java 实现
- 堆排序(Heapsort)之Java实现
- 堆排序(Heapsort)之Java实现
- 堆排序(Heapsort)之Java实现
- 堆排序算法之JAVA实现
- 堆排序(HeapSort)之java实现
- 数据结构之堆排序java实现
- 堆排序算法之Java实现
- java实现算法之堆排序
- 详解Ajax技术
- Retrofit2.0学习之Form-data传输
- javaScrfipt在各种浏览器中获取对象的方法
- 教你如何写出正确的单例模式
- 有关在Iphone4/5上在Block中传入字符串导致崩溃的解决办法
- 堆排序之Java实现
- java中类和接口
- 数据结构与算法学习
- 初入spring源码--整体框架
- 一些好的博客
- DHTML说明
- Javascript详解二
- EAS BOS webservice安全性
- 模仿音乐播放器带进度的播放暂停按钮