题解 | #排序#
排序
https://www.nowcoder.com/practice/2baf799ea0594abd974d37139de27896
//堆排序 时间O(n log n) 空间O(1) 不稳定 #include <any> #include <vector> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 将给定数组排序 * @param arr int整型vector 待排序的数组 * @return int整型vector */ void heapSort(vector<int>& nums,int heapsize){ //调整为小根堆 for(int i=heapsize/2-1;i>=0;i--){ heapify_down(nums, heapsize, i); } //输出 for(int i=heapsize-1;i>0;i--){ swap(nums[0],nums[i]); heapsize--; //先减小堆数量 再调整堆 heapify_down(nums, heapsize, 0); } } void heapify_down(vector<int>& nums,int heapsize,int i){ int largest=i; int left=2*i+1; int right=2*i+2; if(left<heapsize&&nums[left]>nums[largest]) largest=left; if(right<heapsize&&nums[right]>nums[largest]) largest=right; if(largest!=i){ swap(nums[largest],nums[i]); heapify_down(nums,heapsize,largest); } } vector<int> MySort(vector<int>& arr) { // write code here heapSort(arr, arr.size()); return arr; } };