1、颜色分类
给定一个包含红色、白色和蓝色、共
n个元素的数组nums,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数
0、1和2分别表示红色、白色和蓝色。必须在不使用库内置的 sort 函数的情况下解决这个问题。
**示例 1:输入:**nums = [2,0,2,1,1,0] 输出:[0,0,1,1,2,2]
**示例 2:输入:**nums = [2,0,1] 输出:[0,1,2]
class Solution {
public:
void sortColors(vector<int>& nums) {
int key=1,i=0,left=-1,right=nums.size();
while(i<right) {
if(nums[i]<key) swap(nums[++left],nums[i++]);
else if(nums[i]==key) i++;
else swap(nums[--right],nums[i]);
}
}
};
2、归并排序
给你一个整数数组
nums,请你将该数组升序排列。你必须在不使用任何内置函数的情况下解决问题,时间复杂度为
O(nlog(n)),并且空间复杂度尽可能小。**示例 1:输入:**nums = [5,2,3,1] 输出:[1,2,3,5]
**示例 2:输入:**nums = [5,1,1,2,0,0] 输出:[0,0,1,1,2,5]
class Solution {
public:
vector<int> tmp;
vector<int> sortArray(vector<int>& nums) {
tmp.resize(nums.size());
(nums,,nums.());
nums;
}
{
(left>=right) ;
mid=left+(right-left)/;
(nums,left,mid);
(nums,mid,right);
cur1=left,cur2=mid,i=;
(cur1<=mid&&cur2<=right) {
(nums[cur1]<nums[cur2]) tmp[i++]=nums[cur1++];
tmp[i++]=nums[cur2++];
}
(cur1<=mid) tmp[i++]=nums[cur1++];
(cur2<=right) tmp[i++]=nums[cur2++];
( i=left;i<=right;i++) nums[i]=tmp[i-left];
}
};





