C++的堆排序

template<typename T>
void maxHeapify(T arr[], int index, int heapSize) {
  int maxIndex = index;
  int left = 2 * index + 1;
  int right = left + 1;
  if (left < heapSize && arr[index] < arr[left]) {
    maxIndex = left;
  }
  if (right < heapSize && arr[maxIndex] < arr[right]) {
    maxIndex = right;
  }
  if (maxIndex != index) {
    swap(arr[maxIndex], arr[index]);
    maxHeapify(arr, maxIndex, heapSize);
  }
    return;
}
template<typename T>
void build(T arr[], int heapSize) {
     for (int i = heapSize / 2 - 1; i >= 0; i--) {
        maxHeapify(arr, i, heapSize);
     }
}
template<typename T>
void sort(T arr[], int heapSize) {
     build(arr, heapSize);
     for (int i = heapSize - 1; i > 0; i--) {
        swap(arr[0], arr[i]);
        maxHeapify(arr, 0, i);
     }
}
template<typename T>
void swap(T &a, T &b) {
     T temp = a;
     a = b;
     b = temp;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容