package heapSort;
public class HeapSort {
HeapSort(){
;
}
private void Max_Heap(int[] A, int i, int heap_size){
int l = i << 1;
int r = i << 1 | 1;
int largets;
if(l <= heap_size && A[l] > A[i]){
largets = l;
}
else{
largets = i;
}
if(r <= heap_size && A[r] > A[largets]){
largets = r;
}
if(largets != i){
int tp = A[i]; A[i] = A[largets]; A[largets] = tp;
Max_Heap(A, largets, heap_size);
}
}
private void Build_Max_Heap(int[] A){
int heap_size = A.length - 1;
for(int i = heap_size/2; i >= 0; i--){
Max_Heap(A, i, heap_size);
}
}
int[] Sort(int[] A){
int heap_size = A.length - 1;
Build_Max_Heap(A);
for(int i= A.length-1; i > 0; i --){
int tp = A[i]; A[i] = A[0]; A[0] = tp;
heap_size -= 1;
Max_Heap(A, 0, heap_size);
}
return A;
}
public static void main(String[] args){
HeapSort hs = new HeapSort();
int[] A = {1, 4, 8, 9, 3, 2, 1};
hs.Sort(A);
for(int a: A){
System.out.println(a);
}
}
}
java堆排序实现
最新推荐文章于 2024-08-11 10:39:52 发布