public class HeapSort{
? ? public void sort(int [] nums){
? ? ? ? ? ? int N =nums.length-1;
? ? ? ? ? ? for(int k=2/N, k>=1, k--){
? ? ? ? ? ? ? ? ? ? sink(nums,k,N);
????????????}
? ? ? ? ? ? while(N>1){
? ? ? ? ? ? ? ? ? ? swap(nums,1,N--);
? ? ? ? ? ? ? ? ? ? sink(nums, 1,N);
????????????}
????}
? ? private void sink(int [] nums,int k,int N){
? ? ? ? ? ? while(2*k<=N){
? ? ? ? ? ? ? ? ?int j=2*k;
? ? ? ? ? ? ? ? ?if(j < N && nums[j]<nums[j+1])? ?j++;
? ? ? ? ? ? ? ? ?if(nums[k]>=nums[j])? break;
? ? ? ? ? ? ? ? ?swap(nums,k,j);
? ? ? ? ? ? ? ? ?k=j;
????????????}
? }
? private void swap(int [] nums, int i, int j){
? ? ? ? ? ?int t=nums[i];
? ? ? ? ? ?nums[i]=nums[j];
? ? ? ? ? ?nums[j]=t;
? }
}