package com.Sort;
/**
*
* @author NullPointer
*
*/
public class Heap {
public static int[] newHeap(int[] array, int start,int end) {
int current = start;
int leftChild = 2*current+1;
int temp = array[current];
for( ; leftChild<=end;current = leftChild,leftChild=2*leftChild+1) {
if(leftChild<end&&array[leftChild]<array[leftChild+1]) {
leftChild++;
}
if(array[leftChild]>temp) {
array[current] = array[leftChild];
array[leftChild] = temp;
}else {
break;
}
}
return array;
}
public static int[] HeapSort(int[] array) {
int len = array.length;
for(int i = (len/2)-1;i>=0;i--) {
newHeap(array,i,len-1);
}
for(int j = len-1;j>0;j--) {
swap(array,0,j);
newHeap(array,0,j-1);
}
return array;
}
public static int[] swap(int[] array,int index1,int index2) {
int temp;
temp = array[index1];
array[index1] = array[index2];
array[index2] = temp;
return array;
}
public static void main(String[] args) {
int[] array = { 2, 8, 5, 6, 10, 5, 4, 6, 11, 15, 3 };
array = HeapSort(array);
for (int s : array) {
System.out.println(s);
}
}
}