import java.util.*;
public class HeapSorting{
public static void adajustHeap(int[] l,int i,int length){
for(int k=2*i+1;k<length;k++){
if(k+1<length && l[k]<l[k+1])
k++;
if(l[i]<l[k]){
swap(l,i,k);
adajustHeap(l,k,length);
}
else{
break;
}
}
}
public static void swap(int[] l,int i,int j){
int temp=l[i];
l[i]=l[j];
l[j]=temp;
}
public static void sort(int[] l){
for(int k=l.length/2-1;k>=0;k--){
adajustHeap(l,k,l.length);
}
System.out.println(Arrays.toString(l));
for(int j=l.length-1;j>=0;j--){
swap(l,0,j);
adajustHeap(l,0,j);
}
}
public static void main(String[] args){
int[] a={9,8,7,6,5,4,3,2,1};
sort(a);
System.out.println(Arrays.toString(a));
}
}
def adjust(nums,i,end):
while 2*i+1<end:
tmp=2*i+1
if 2*i+2<end and nums[2*i+1]<nums[2*i+2]:
tmp=2*i+2
if nums[i]<nums[tmp]:
nums[i],nums[tmp]=nums[tmp],nums[i]
i=tmp
else:
break
def heapSort(nums):
for i in range(len(nums)//2-1,-1,-1):
adjust(nums,i,len(nums))#建堆
for i in range(len(nums)-1,0,-1):
nums[0],nums[i]=nums[i],nums[0]
adjust(nums,0,i)
print(nums)
heapSort([16,7,3,20,17,8])