有一个数组,长度为n,里面只有0、1、2(分别代表红、白、蓝色),现在要求通过两两交换的方式,使得0在最前面,1在中间,2在最后面。
代码实现如下:
package com.threeTop.www;
/**
* 荷兰国旗问题
* @author wjgs
*
*/
public class DutchFlag {
/**
* 荷兰国旗问题
* @param array
*/
public static void sort(int []array)
{
int begin=0;
int end=array.length-1;
int current=0;
while(current<=end)
{
if(array[current]==0)
{
swap(array,current,begin);
begin++;
current++;
}
else if(array[current]==1)
{
current++;
}else if(array[current]==2)
{
swap(array,current,end);
end--;
}
}
System.out.print("排序后的结果:");
for(int i=0;i<array.length;i++)
{
System.out.print(array[i]+", ");
}
}
//交换两个元素
private static void swap(int[] array, int x, int y)
{
int temp=array[x];
array[x]=array[y];
array[y]=temp;
}
public static void main(String[] args)
{
int []array={1,1,0,0,2,2,1,0,1,2,1,0,2};
int []array2={1,1,0,0,2,2,1,0,1,2,1,0,2};
DutchFlag.sort(array);
System.out.println();
DutchFlag.sort(array2);
}
}