- 排序数组
给定一个整数数组 nums,将该数组升序排列。
示例 1:
输入:[5,2,3,1]
输出:[1,2,3,5]
示例 2:
输入:[5,1,1,2,0,0]
输出:[0,0,1,1,2,5]
提示:
1 <= A.length <= 10000
-50000 <= A[i] <= 50000
常用排序算法:
归并排序
选择排序
冒泡排序
计数排序
插入排序
希尔排序
堆排序
快速排序
参考链接:https://www.cnblogs.com/onepixel/p/7674659.html
思路一:归并排序
时间复杂度: O(n*log(n)) 稳定
空间复杂度: O(n)
class Solution {
public:
vector<int> sortArray(vector<int>& nums) {
return sort(nums, 0, nums.size()-1);
}
vector<int> sort(vector<int>& nums, int left, int right){
if (left == right){
return {
nums[left]};
} else if (left > right){
return {
};
}
vector<int> ans;
int mid = (left + right - 1) / 2;
auto leftNums = sort(nums, left, mid);
auto rightNums = sort(nums, mid + 1, right);
int i = 0, j = 0;
while (i < leftNums.size() && j < rightNums.size()){
if (leftNums[i] <= rightNums[j]){
ans.push_back(leftNums[i++]);
} else {
ans.push_back(rightNums[j++]);
}
}
while (i < leftNums.size()){
ans.push_back(leftNums[i++]);
}
while (j < rightNums.size()){
ans.push_back(rightNums[j++]);
}
return ans;
}
};
/*188ms,97.2MB*/
class Solution {
public:
vector<int> sortArray(vector<int>& nums) {
return sort(nums, 0, nums.size()-1);
}
vector<int> sort(vector<int>& nums, int left, int right){
if (left == right){
return {
nums[left]};
} else if (left > right){
return {
};
}
int mid = (left + right - 1) / 2;
auto leftNums = sort(nums, left, mid);
auto rightNums = sort(nums, mid + 1, right);
return mergeSort(leftNums, rightNums);
}
vector<int> mergeSort(vector<int>& leftNums, vector<int>& rightNums){
vector<int&g