//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); } }