大根堆---堆排序

阅读 83

2022-03-24

    class Solution {

 

    public int[] sortArray(int[] nums) {

     //堆排序

         int len=nums.length;

         HeapSort(nums,len);

         return nums;

    }

    void HeapSort(int nums[],int len)

    {

        BuildMaxHeap(nums,len);

        for(int i = len-1;i>=0;i--){

            int temp ;

            temp = nums[0];

            nums[0]= nums[i];

            nums[i]=temp;  

            HeapAdjust(nums,0,i);

        }

    }

     void BuildMaxHeap(int nums[],int len){

         for(int i = (len/2)-1;i>=0;i--){

            HeapAdjust(nums,i,len);

            

          }

     }

     void HeapAdjust(int nums[],int k,int len){

          int temp = nums[k];

         for(int i = (2*k)+1; i<=len-1; i=(i*2)+1 ){

             if( i < len-1 && nums[i]<nums[i+1])

                      i++;

                if(temp >nums[i])

                     break;

                else{

                    nums[k]=nums[i];

                        k=i;

                }

                

          }

              

精彩评论(0)

0 0 举报