红白蓝三色旗问题

 (C++)

void sortColors(int A[], int n)//假设题目要求按红白蓝三种颜色顺序排列,0指代红色,1指代白色,2指代蓝色
{
    int j = 0, k = n - 1, temp;//j为红色指针,k为蓝色指针
    for (int i = 0; i <= k; i++)//i为遍历指针
    {
        if (A[i] == 0 && i != j)
        {
            temp = A[j];
            A[j] = A[i];
            A[i] = temp;
            i--;//交换之后原位置的颜色仍需检查,所以i先减1
            j++;
        }
        else if (A[i] == 2 && i != k)
        {
            temp = A[k];
            A[k] = A[i];
            A[i] = temp;
            i--;//交换之后原位置的颜色仍需检查,所以i先减1
            k--;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/theShepherd/article/details/81945439