#输入整型数组和排序标识,对其元素按照升序或降序进行排序#

输入整型数组和排序标识,对其元素按照升序或降序进行排序

https://www.nowcoder.com/practice/dd0c6b26c9e541f5b935047ff4156309

#include <bits/stdc++.h>
using namespace std;
void Heapify(vector<int>& nums, int i, int size, int flag) {
    int lastest = i;
    int left = i * 2 + 1;
    int right = i * 2 + 2;
    if (flag == 0) {
        if (left < size && nums[left] > nums[lastest]) {
            lastest = left;
        }
        if (right < size && nums[right] > nums[lastest]) {
            lastest = right;
        }
    } else {
        if (left < size && nums[left] < nums[lastest]) {
            lastest = left;
        }
        if (right < size && nums[right] < nums[lastest]) {
            lastest = right;
        }
    }


    if (lastest != i) {
        swap(nums[i], nums[lastest]);
        Heapify(nums, lastest, size, flag);
    }
}



void buildHeap(vector<int>& nums, int flag) {
    int n = nums.size();
    for (int i = n / 2 - 1; i >= 0; --i) {
        Heapify(nums, i, n, flag);
    }
    for (int i = n - 1; i >= 0; --i) {
        swap(nums[0], nums[i]);
        Heapify(nums, 0, i, flag);
    }
}
int main() {
    int x;
    int n;
    cin >> n;
    vector<int> nums;
    for (int i = 0; i < n; ++i) {
        cin >> x;
        nums.push_back(x);
    }
    int flag;
    cin >> flag;
    buildHeap(nums, flag);
    for (auto& i : nums) {
        cout << i << " ";
    }

    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务