//100万个数取出前100名。n是100万,m是100。
template <typename T>
void heapSort(T arr[], int n, int m)
{
for (int i = (m-1)/2; i >=0; i--)
{
__shiftDown(arr , m , i);
}
//只维护前100名
for (int i = m; i < n; ++i)
{
if (arr[m] > arr[0])
{
swap(arr[m], arr[0]);
__shiftDown(arr , m , 0);
}
}
//排序
for (int i = 0; i < m; ++i)
{
swap(arr[0] , arr[m-i]);
__shiftDown(arr, m-i , 0);
}
}