堆排序

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

using namespace std;

void getMixHeap(vector<int>& nums, int n, int i) {
    int f = i;
    int l = 2*i + 1;
    int r = 2*i + 2;
    if(l < n && nums[l] > nums[f]) {
        f = l;
    }
    if(r < n && nums[r] > nums[f]) {
        f = r;
    }
    if(i != f) {
        swap(nums[f], nums[i]);
        getMixHeap(nums, n, f);
    }
}

void heapSort(vector<int>& nums) {
    int n = nums.size();
    for(int i = n - 1; i >= 0; i--) {
        getMixHeap(nums, n, i);
    }
    for(int i = n - 1; i >= 0; i--) {
        swap(nums[i], nums[0]);
        getMixHeap(nums, i, 0);
    }
}


void printV(vector<int>& nums) {
    for(int num : nums) {
        cout << num << " ";
    }
}


int main() {

    vector<int> nums = {1, 5, 6, 9, 23, 45, 1, 7, 7};
    heapSort(nums);
    printV(nums);

    return 0;
}

posted @   铜锣湾陈昊男  阅读(0)  评论(0)    收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示