问题描述:
现在有一个包含n个物体的数组,其中物体颜色为颜色为红色、白色或蓝色,请对这个数组进行排序,让相同颜色的物体相邻,颜色的顺序为红色,白色,蓝色。
我们用0,1,2分别代表颜色红,白,蓝
注意:
本题要求你不能使用排序库函数
思路:三路快排的思想,以1作为标志,比1小的放在一边,比1大的放在另一边,但是要注意一点的是大的元素进行交换后由于该元素没有和标志1作比较,因此需要i=i-1。
代码实现:
public class Solution { public void sortColors(int[] A) { int n=A.length; int begin=0,end=n-1,lt=0,gt=n-1; for(int i=0;i<=gt;i++){ //此处设为gt,而不是n if(A[i]<1){ A[i]=A[lt]; A[lt]=0; lt++; } else if(A[i]>1){ A[i]=A[gt]; A[gt]=2; gt--; i=i-1; //大的元素进行交换没有和1比较,需要i=i-1; } } } }