C++ STL中的堆排序?qū)崿F(xiàn)

c++
小樊
91
2024-08-06 20:56:16

以下是使用C++ STL中的堆排序算法實(shí)現(xiàn)堆排序的示例代碼:

#include <iostream>
#include <vector>
#include <algorithm>

void heapSort(std::vector<int>& arr) {
    std::make_heap(arr.begin(), arr.end()); // 創(chuàng)建最大堆

    // 依次將最大堆的根節(jié)點(diǎn)取出并放到數(shù)組末尾
    for (int i = arr.size() - 1; i > 0; i--) {
        std::pop_heap(arr.begin(), arr.begin() + i + 1);
    }
}

int main() {
    std::vector<int> arr = {12, 11, 13, 5, 6, 7};
    
    std::cout << "Array before sorting:\n";
    for (int num : arr) {
        std::cout << num << " ";
    }

    heapSort(arr);

    std::cout << "\nArray after sorting:\n";
    for (int num : arr) {
        std::cout << num << " ";
    }

    return 0;
}

在上面的示例中,我們使用std::make_heap函數(shù)創(chuàng)建一個(gè)最大堆,然后使用std::pop_heap函數(shù)依次將最大堆的根節(jié)點(diǎn)取出并放到數(shù)組末尾,最終完成堆排序。最后輸出排序前和排序后的數(shù)組。

0