美文网首页
C++的堆排序

C++的堆排序

作者: 骰子大鳄 | 来源:发表于2017-12-15 12:34 被阅读0次
    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;
    }
    

    相关文章

      网友评论

          本文标题:C++的堆排序

          本文链接:https://www.haomeiwen.com/subject/knusixtx.html