题目
给定一个包含红色、白色和蓝色,一共n个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
此题中,我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。
- 注意:不能使用代码库中的排序函数来解决这道题。
示例:
输入: [2,0,2,1,1,0]
输出: [0,0,1,1,2,2]
冒泡排序
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
* 冒泡排序
*/
var sortColors = function(nums) {
let len=nums.length;
if(len<2){
return nums;
}
for(let i=0;i<len;i++){
let flag=false;
for(let j=0;j<len-i;j++){
if(nums[j]>nums[j+1]){
let temp=nums[j];
nums[j]=nums[j+1]
nums[j+1]=temp;
flag=true;
}
}
if(!flag){
return nums
}
}
return nums
};
一次遍历
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var sortColors = function(nums) {
let len=nums.length;
if(len<2){
return nums;
}
let p0=0;
/*当前元素*/
let curr=0;
let p2=len-1;
let temp;
while(curr<=p2){
if(nums[curr]===0){
temp=nums[p0];
nums[p0++]=nums[curr];
nums[curr++]=temp
}else if(nums[curr]===2){
temp=nums[curr];
nums[curr]=nums[p2]
nums[p2--]=temp
}else{
curr++
}
}
return nums
};
说明
- 题目链接:leetcode-cn.com/problems/so… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
- 封面图:bing.ioliu.cn/photo/Helig…