排序算法 互动版

堆排序算法伪代码

MAX_HEAPIFY(A,i)
    l<——Left(i)
    r<——Right(i)

    if l<=length(A) and A[l]>A[i]
       then largest<——l
    if r<=length(A) and A[r]>A[largest]
       then largest<——r
    if largest!=i
       then exchange A[i]<——> A[largest]//到这里完成了一层下降
       MAX_HEAPIFY(A,largest)//这里是递归的让当前元素下降到最低位置

BUILD_MAX_HEAP(A):
    heapsize[A]<——length[A]
    for i<——length[A]/2+1  to 0
    MAX_HEAPIFY(A,i)//堆排序的开始首先要构造大顶堆,这里就是对内层节点进行逐级下沉(小元素)

HEAP_SORT(A):
  BUILD_MAX_HEAP(A)
  for i<——length[A]-1 to 1//这里能够保证堆大小和数组大小的关系,堆在每一次置换后都减一
      do exchangeA[1]<——>  A[i]
      length[A]<——length[A]-1
      MAX_HEAPIFY(A,0,i-1)//对交换后的元素下沉
用堆排序算法对数组arr[10] = {8, 5, 10, 12, 7, 6, 15, 9, 11, 3}从小到大排序。