有一个仅有红、白、蓝三种颜色的条块组成的条块序列,编写一个时间复杂度为O(n)的算法,使得这些条块按红白蓝的顺序排好。
顺序扫描线性表,设三个指针
typedef enum{red, white, blue} color;
void f(color a[], int n)
{
int i = 0, j = 0, k = n-1;
while(j < k)
{
switch(a[j])
{
case red: Swap(a[i], a[j]);i++;j++;break;
case white: j++;break;
case blue: Swap(a[k], a[j]);k--;break; //这里没有j++
}
}
}
救命,我怎么想不到