为了达到n的空间复杂度,可以使用快排中的partition方法。利用三个指针:start, iterator, last以及一个区分值p这里为1。iterator遍历整个数组,如果遇到<=1的数则和start交换,遇到>1的数则和last交换这样可以将数字分成<p,=p,>p三部分。
/**
* Created by marsares on 15/6/11.
*/
public class SortColors {
public void sortColors(int[] nums) {
int start=0;
int iterator=0;
int last=nums.length-1;
while(iterator<=last){
if(nums[iterator]<1){
swap(nums,start,iterator);
start++;
iterator++;
}
else if(nums[iterator]==1)iterator++;
else{
swap(nums,iterator,last);
last--;
}
}
}
private void swap(int[]nums,int index1,int index2){
int tmp=nums[index1];
nums[index1]=nums[index2];
nums[index2]=tmp;
}
public void printColors(int[]nums){
for(int i:nums){
System.out.print(i+" ");
}
System.out.println();
}
public static void main(String[]args){
SortColors sc=new SortColors();
int[]array={};
sc.sortColors(array);
sc.printColors(array);
}
}