java堆排序

来源:互联网 发布:java gui 输入框 编辑:程序博客网 时间:2024/06/06 06:57
package com.zz.sort;import java.util.Random;public class HeapSort {/** * @param args */public static void main(String[] args) {int iLength = 5000;int[] iArgs = new int[iLength];for (int i = 0; i < iLength; i++) {Random objRandom = new Random();iArgs[i] = objRandom.nextInt(10000);}new HeapSort().heapSort(iArgs,0,iArgs.length);for (int i = 0; i < iArgs.length; i++) {System.out.print(iArgs[i] + " ");}}/** * 数组排序成大根堆 *  * @param iArgs 数组 * @param parent 父节点 * @param length 数组长度 */private void bigHeap(int[] iArgs,int parent,int length) {//父节点的值int iTempParent = iArgs[parent];//左节点的位置int child = 2*parent + 1;while( child < length) {//存在右子节点,并且右子结点比父节点的值大if(child + 1 < length && iArgs[child + 1] > iArgs[child]) {child ++;}//父节点的值比子节点的值大,程序直接跳出if(iArgs[parent] > iArgs[child]) {break;}//子节点比父节点大,把子节点的值赋给父节点iArgs[parent] = iArgs[child];iArgs[child] = iTempParent;//子节点当做父节点,重新排序parent = child; child = 2* parent + 1;}}/** * 大根堆最顶端节点和最右端尾端交换 *  * @param iArgs 数组 * @param parent 父节点 * @param length 数组长度 */private void heapSort(int[] iArgs,int parent,int length ) {for ( int i = length/2 -1 ;i >= 0; i --) {bigHeap(iArgs,i,length);}for(int i = iArgs.length -1 ; i >= 0 ;i--) {//顶层父节点和尾端节点交换位置int temp = iArgs[0];iArgs[0] = iArgs[i];iArgs[i] = temp;//重构大根堆bigHeap(iArgs,0,i);}}}

原创粉丝点击