描述:
将三种颜色作为012,要求将无序数组排为有序。
思路:
1.遍历,记录0,1,2的个数,然后重写数组。O(N)的时间复杂度。需要额外空间
2.采用交换的思想,遍历数组,将无序的数字交换到前后。O(N)的时间复杂度。空间复杂度O(1)。
代码:
public void ThreeSort(int[] arr,int len)
{
int begin=0;
int end=len-1;
int current=0;
while(current<=end) //从交换来的棋子是0,又恰好current==end,此时还要判断。
{
if(arr[current]==0)
{
SWAP(arr,begin,current);
begin++;
current++; //从左边开始移动的能保证current左方的值一定是0;
}
else if(arr[current]==1)
{
current++;
}
else if(arr[current]==2)
{
SWAP(arr,end,current);
end--; //交换过来的可能是0,current不能移动
}
}
}