lurenaa的博客

🥧典型的堆排序题目

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public:
void sortColors(vector<int>& nums) {
nums.insert(nums.begin(), 0);
int n = nums.size() - 1;
for(int i = n / 2; i >= 1; --i) {
sink(nums, i, n);
}
while(n > 1) {
swap(nums[1], nums[n--]);
sink(nums, 1, n);
}
nums.erase(nums.begin());
}
void sink(vector<int>& nums, int k,int n) {
int j;
while(k <= n / 2) {
j = k * 2;
if(nums[j] < nums[j + 1] && j + 1 <= n) ++j;
if(nums[k] >= nums[j]) break;
swap(nums[k], nums[j]);
k = j;
}
}
};

Accepted

87/87 cases passed (0 ms)

Your runtime beats 100 % of cpp submissions

Your memory usage beats 5.17 % of cpp submissions (8.9 MB)