堆排序

时间:2022-05-06
本文章向大家介绍堆排序,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
function sort_heap(arr){
      var temp;
      var n = arr.length;
      for(var i = parseInt(n/2-1);i>=0;i--){
          Adjust(arr, i, n);  
      }        
      for(var i = n-1;i > 0;i--){
          temp = arr[0];                                //交换根节点与最后一个叶子节点,要调整的范围减1
          arr[0] = arr[i];
          arr[i] = temp;
          Adjust(arr, 0, i);                          //不断减小长度、 交换、调整
      }  
      return arr;
  }
  function Adjust(arr,i,n){    
      var j = 2*i+1;                                
      var temp = arr[i];                                
      while(j<n){                                        
          if(j<n-1 && arr[j]<arr[j+1]){
              j++; 
          }
          if(temp >= arr[j]){
             break; 
          }
          arr[parseInt((j-1)/2)] = arr[j];              
          j = j*2+1;                                  
      }
      arr[parseInt((j-1)/2)] = temp;                                
  }