问题描述:给定一个包含红色、白色、蓝色,一共n个元素的数组,原地对他们进行排序,使得相同并颜色的颜色相邻,并按照红色、白色、蓝色顺序排列,在此题中使用整数0、1、2分别表示红色、白色和蓝色。
三指针求解:本题要求所有的0放在左边,所有的3放在右边,所以可以定义一个start和end指针,指向0和3的位置,并用index进行遍历,如果index为0,则与start位置进行交换,如果index=3则域end位置进行交换,直到index位置为2,这时index前移。
public void swap(int[]nums,int start,int end)
{
int temp=nums[start];
nums[start]=nums[end];
nums[end]=tem0;
}|
public int[]change(int []nums)
{
int start=0;
int end=nums.length;
int index=1;
while(start<index<end)
{
while(nums[index]==2)
{
if(nums[index]==1)
{
swap(nums,index,start);
start++;
}else if(nums[index]==3)
{
swap(nums,index,end);
end--;
}
}
index++
}
???????return nums;
}