堆排序算法 java实现
八大排序之一:堆排序;平均时间复杂度为O(nlogn);不稳定;依托于完全二叉树的思想来实现;
根节点所在数组位置为0;节点n的左子树为2*n+1;右子树为2*n+2;
package it.cast.Sort_Algorithm.Sort_Algorithm;
import java.util.Arrays;
public class HeapSort {
public static void main(String[] args) {
int[] array= new int[]{3,7,5,1,9,5};
heapSort(array);
System.out.println(Arrays.toString(array));
}
private static void heapSort(int[] array){
for (int i=array.length/2-1;i>=0;i--){
adjustHeap(array,i,array.length);
}
for(int j=array.length-1;j>=0;j--){
int temp=array[0];
array[0]=array[j];
array[j]=temp;
adjustHeap(array,0,j);
}
}
private static void adjustHeap(int[] array,int i,int length){
int temp=array[i];
for (int k=2*i+1;k<length;k++){
if(k+1<length && array[k]<array[k+1]){
k++;
}
if(array[k]>temp){
array[i]=array[k];
i=k;
}else{
break;
}
}
array[i]=temp;
}
}