堆排序–建堆–构造最大堆–堆排序
package Algorithm;
import java.util.Arrays;
class Heap{
private int[] arr;
private int size;
public Heap(){
arr = null;
size = 0;
}
public Heap(int[] arr) {
this.arr = arr;
size = arr.length;
for (int i = this.getSize()/2-1; i >= 0 ; i--) {
adjustHeap(i);
}
}
public void adjustHeap(int index){
int l = this.getLeft(index);
int r = this.getRight(index);
int largest = index;
if (l<this.getSize() && arr[l]>arr[index])
largest = l;
if (r<this.getSize() && arr[r]>arr[largest])
largest = r;
if (largest!=index){
swap(arr, largest, index);
adjustHeap(largest);
}
}
public void heapSort(){
for (int i = this.getSize()-1; i > 0; i--) {
swap(arr, 0, i);
this.size-=1;
adjustHeap(0);
}
}
public void show(){
System.out.println(Arrays.toString(arr));
}
private int getSize(){
return this.size;
}
private int getLeft(int i){
if (i*2+1<this.getSize())
return 2*i+1;
return this.getSize()-1;
}
private int getRight(int i){
if (i*2+2<this.getSize())
return 2*i+2;
return this.getSize()-1;
}
private static void swap(int arr[], int num1, int num2){
int tmp = arr[num1];
arr[num1] = arr[num2];
arr[num2] = tmp;
}
}
public class HeapSort{
public static void main(String[] args) {
int[] arr = {6,8,4,1,9,0,7,12,11};
Heap heap = new Heap(arr);
heap.heapSort();
heap.show();
}
}