堆排序
#什么是堆
#堆排序
#堆排序代码实现
//堆排序
//以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);
}
}