Java数据结构——堆排序实现
2016-05-05 14:22
465 查看
package 排序; public class 堆排序 { public static void main(String[] args) { int[] array = {3,1,5,7,2,4,9,6,10,8}; System.out.println("数组初始值:"); print(array,10); heapSort(array,10); System.out.println("数组转化后的结果:"); print(array, 10); } /** * 堆排序算法 * @param array * @param i */ private static void heapSort(int[] array, int i) { //修建初始堆 buildingHeap(array,10); //从最后一个元素开始对序列进行调整 for (int j = i-1;j>0;--j) { //交换堆顶元素array[0]和堆中最后一个元素 int temp = array[j]; array[j] = array[0]; array[0] = temp; //每次交换堆顶元素和堆中最后一个元素之后,都要对堆进行调整 heapAdjust(array, 0, j); } } /** * 讲array数组建成堆 * 调整完之后的第一个元素是序列最小的元素 * @param array * @param i */ private static void buildingHeap(int[] array, int i) { System.out.println("修建初始堆:"); for (int j = (i-1)/2; j >= 0; --j) { heapAdjust(array,j,i); } System.out.println("结束修建!!!!!!!!!"); } /** * 修建新的堆 * @param array 待调整的堆数组 * @param j 待调整的数组元素的位置 * @param i i是数组的长度 */ private static void heapAdjust(int[] array, int j, int length) { int temp = array[j]; int child = 2*j + 1;//左孩子结点的位置。(i+1 为当前调整结点的右孩子结点的位置) while (child<length) { // 如果右孩子存在并且右孩子大于左孩子(找到比当前待调整结点大的孩子结点) if (child+1 < length && array[child]<array[child+1]) { ++child; } if (array[j]<array[child]) { // 如果较大的子结点大于父结点 array[j] = array[child]; // 那么把较大的子结点往上移动,替换它的父结点 j = child; // 重新设置s ,即待调整的下一个结点的位置 child = 2*j +1; } else { // 如果当前待调整结点大于它的左右孩子,则不需要调整,直接退出 break; } array[j] = temp; } System.out.println("调整:"); print(array, length); } private static void print(int[] array, int i) { for (int j = 0; j < i; j++) { System.out.print(" " + array[j]); } System.out.println(); } }
相关文章推荐
- 堆排序
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#堆排序实现方法
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force