publicstaticvoidmain(String[] args){
int[] ar ={1,4,3,5,7,11,9,10,0,1,6,3,5,4,8};heapsort(ar);
System.out.println(Arrays.toString(ar));}
publicstaticvoidshellsort(int[] a){for(int gap = a.length /2; gap >0; gap /=2){for(int i = gap; i < a.length; i++){
int tmp = a[i];
int j = i;while(j >= gap && tmp < a[j - gap]){
a[j]= a[j - gap];
j -= gap;}
a[j]= tmp;}}}
publicstaticvoidheapsort(int[] arr){for(int i = arr.length /2-1; i >=0; i--){percDown(arr, i, arr.length);}for(int i = arr.length -1; i >0; i--){swapReferences(arr,0, i);percDown(arr,0, i);}}privatestaticvoidpercDown(int[] arr, int i, int n){
int child;
int tmp;for(tmp = arr[i];leftChild(i)< n; i = child){
child =leftChild(i);if(child != n -1&& arr[child]< arr[child +1]){
child++;}if(tmp < arr[child]){
arr[i]= arr[child];}else{break;}}
arr[i]= tmp;}privatestatic int leftChild(int a){return2* a +1;}privatestaticvoidswapReferences(int[] arr, int i, int i1){
int a = arr[i];
arr[i]= arr[i1];
arr[i1]= a;}