【排序】堆排序-1

// 参考《算法导论》中的伪代码
public void HeapSort(int[] num) {
  buildMaxHeap(num);
  for(int i=num.length-1; i>0; i--) {
    exchange(num, i, 0);
    maxHeapify(num, 0, i);
  }
}

public void buildMaxHeap(int[] num) {
  for(int i=num.length/2-1; i>=0; i--) {
    maxHeapify(num, i, num.length);
  }
}

public void maxHeapify(int[] num, int index, int length) {
  int left = 2 * index + 1;
  int right = 2 * index + 2;
  int largest = index;
  if(leftnum[largest])
    largest = left;
  if(rightnum[largest])
    largest = right;
  if(largest!=index) {
    exchange(num, index, largest);
    maxHeapify(num, largest);  
  }
}
  • maxHeapify() 维护最大堆性质的关键,时间复杂度
  • buildMaxHeap() 建堆,线性时间复杂度
  • heapSort() 堆排序,时间复杂度

你可能感兴趣的:(【排序】堆排序-1)