堆排序

#什么是堆

  • #堆排序

  • 利用大根堆的性质,每趟排序选择队尾元素和首元素互换,从而实现顺序排列
  • #堆排序代码实现

    //堆排序

    //以k为根的子树调整为大根堆

    void HeadAdjust(int arr[], int k, int len)

    {

    arr[0] = arr[k];

    for (int i = 2 * k; i <= len; i*=2)

    {

    if (i < len && arr[i] < arr[i + 1])

    i++;

    if (arr[0] > arr[i])

    break;

    else

    {

    arr[k] = arr[i];

    k = i;

    }

    }

    arr[k] = arr[0];

    }

    //建立大根堆

    void BulidMaxHead(int arr[], int len)

    {

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

    HeadAdjust(arr, i, len);

    }

    //大根堆排序算法

    void HeapSort(int arr[], int len)

    {

    BulidMaxHead(arr, len);

    for (int i = len; i > 0; i++)

    {

    swap(arr[i], arr[1]);

    HeadAdjust(arr,1,i-1);

    }

    }