leetcode 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 <= 50000
- 2.-50000 <= nums[i] <= 50000
我的代码
class Solution {
public:
vector<int> sortArray(vector<int>& nums) {
sort(nums.begin(), nums.end());
return nums;
}
};
我的成绩
执行结果:通过
执行用时 : 108 ms, 在所有 C++ 提交中击败了11.98%的用户
内存消耗 : 16 MB, 在所有 C++ 提交中击败了21.09%的用户
一些想法
- 本道题是一道排序题,我使用的是c++自带的排序方式(快速排序),但看来效果不是很好。
执行用时为 8 ms 的范例
class Solution {
public:
vector<int> sortArray(vector<int>& nums) {
int len=nums.size();
heap_sort(nums,len);
return nums;
}
void swp(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
void max_heapify(vector<int>& arr,int start,int end)
{
int dad=start;
int son=dad*2+1;
while(son<=end)
{
if(son+1<=end&&arr[son]<arr[son+1]) son++;
if(arr[dad]>arr[son]) return;
else{
swp(arr[dad],arr[son]);
dad=son;
son=dad*2+1;
}
}
}
void heap_sort(vector<int>& arr, int len)
{
for(int i=len/2-1;i>=0;i--) max_heapify(arr,i,len-1);
for(int i=len-1;i>=0;i--)
{
swp(arr[0],arr[i]);
max_heapify(arr,0,i-1);
}
}
};
思考
范例用的堆排序,有时间需要把所有排序方式都看一下。