手撕堆排序

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;

  }

}



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。