题目
Sort Colors
Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue.
Here, we will use the integers 0, 1, and 2 to represent the color red, white, and blue respectively.
Note:
You are not suppose to use the library’s sort function for this problem.
标签
Array、Two Pointers、Sort
难度
中等
分析
题目意思是给定一个数组,包含0,1,2三种数字,将数组从小到大排序。
解题思路是,遍历数组,将所有的0都放到左边,将所有的2都放到右边,剩下中间的就是1。
C代码实现
int i=0, zero=0, second=numsSize-1;
int temp=-1;
for(i=0; i<=second; i++)
{
while( (2 == nums[i]) && (i < second) )
{
temp = nums[i];
nums[i] = nums[second];
nums[second] = temp;
second--;
}
while( (0 == nums[i]) && (i > zero) )
{
temp = nums[i];
nums[i] = nums[zero];
nums[zero] = temp;
zero++;
}
}
本文介绍了一种不使用标准库排序函数解决红白蓝三色排序问题的方法。通过双指针技巧,将0(红色)、1(白色)、2(蓝色)分别对应到数组中的三个位置,实现了原地排序。
758

被折叠的 条评论
为什么被折叠?



