拿破仑席卷欧洲大陆之后,代表自由,平等,博爱的竖色三色旗也风靡一时。荷兰国旗就是一面三色旗(只不过是横向的),自上而下为红白蓝三色。
该问题本身是关于三色球排序和分类的,由荷兰科学家Dijkstra提出。由于问题中的三色小球有序排列后正好分为三类,Dijkstra就想象成他母国的国旗,
于是问题也就被命名为荷兰旗问题(Dutch National Flag Problem)。
该问题本身是关于三色球排序和分类的,由荷兰科学家Dijkstra提出。由于问题中的三色小球有序排列后正好分为三类,Dijkstra就想象成他母国的国旗,
于是问题也就被命名为荷兰旗问题(Dutch National Flag Problem)。
下面是问题的正规描述: 现有n个红白蓝三种不同颜色的小球,乱序排列在一起,请通过两两交换任意两个球,使得从左至右,依次是一些红球、一些白球、一些蓝球。
参考july大神的教程,改写成java版本
public static void swap(int nums[],int i,int j){
if(i==j)
return;
nums[i]^=nums[j];
nums[j]^=nums[i];
nums[i]^=nums[j];
}
public static void sort(int nums[]){
int current=0;
int begin=0;
int end=nums.length-1;
while (current<end) {
if(nums[current]==0){
swap(nums, current, begin);
current++;
begin++;
}
if(nums[current]==1){
current++;
}
if(nums[current]==2){
swap(nums,current,end);
end--;
}
}
}
public static void main(String[] args) {
int nums[]={0,0,1,1,1,2,0,2,1,2};
sort(nums);
for (int i : nums) {
System.out.print(i+",");
}
}
时间复杂度:O(n)
空间复杂度:O(1)