题目描述
912. 排序数组
给你一个整数数组 nums,请你将该数组升序排列。
示例 1:
输入:nums = [5,2,3,1]
输出:[1,2,3,5]
示例 2:
输入:nums = [5,1,1,2,0,0]
输出:[0,0,1,1,2,5]
提示:
1 <= nums.length <= 5 * 104
-5 * 104 <= nums[i] <= 5 * 104
题解
堆排的练习。
class Solution {
public:
void AdjustDown(int parent,vector<int>& nums,int sz)
{
while(1)
{
int child = parent * 2 + 1;
if(child >= sz) break;
if(child + 1 < sz && nums[child] < nums[child + 1])
{
child ++ ;
}
if(nums[child] < nums[parent]) break;
swap(nums[child],nums[parent]);
parent = child;
}
}
vector<int> sortArray(vector<int>& nums) {
//堆排
//建堆
int last_p = (nums.size() - 1 - 1 ) /2;
for(int i = last_p;i >= 0 ; --i)
{
AdjustDown(i,nums,nums.size());
cout << nums[i] << endl;
}
// for(int j = 0;j < nums.size();++j)
// {
// cout << nums[j] << " ";
// }
// cout << endl;
for(int i = nums.size() - 1 ;i >= 0;--i)
{
swap(nums[i],nums[0]);
AdjustDown(0,nums,i);
// for(int j = 0;j < nums.size();++j)
// {
// cout << nums[j] << " ";
// }
// cout << endl;
}
return nums;
}
};
end
- 喜欢就收藏
- 认同就点赞
- 支持就关注
- 疑问就评论