w指针遍历数组,如果w跨过b,则退出
若w指向的元素是白色,指针右移
若w指向的元素是红色,交换w和r指向的元素
若w指向的元素是蓝色,交换w和b指向的元素
代码:
1 void sortColors(int A[], int n) { 2 int r = 0; 3 int w = 0; 4 int b = n - 1; 5 6 while (w < n) { 7 switch (A[w]) { 8 case 0: 9 if (w > r) 10 swap(A[r], A[w]); 11 else 12 w++; 13 r++; 14 break; 15 case 1: 16 w++; 17 break; 18 case 2: 19 if (w < b) 20 swap(A[b], A[w]); 21 else 22 w++; 23 b--; 24 break; 25 default: 26 break; 27 } 28 } 29 }