标签:
将乱序的红白蓝三色小球排列成同颜色在一起的小球组(按照红白蓝排序),这个问题称为荷兰国旗问题。这是因为我们可以将红白蓝三色小球想象成条状物,有序排列后正好组成荷兰国旗。我们用0表示红球,2为篮球,1为白球。
解答:这个问题典型地利用快排中partition过程。不过,要用三个指针,一前begin,一中current,一后end,begin与current都初始化指向数组首部,end初始化指向数组尾部。
1. current遍历整个序列,current指1时,不交换,current++
2. current指0时,与begin交换,而后current++,begin++
3. current指2时,与end交换,而后,current不动,end--
void Func(int* input, int len) { if (input == NULL || len <= 0) return; int current = 0; int begin = 0; int end = len - 1; while (current <= end) { if (array[current] == 0) { swap(array[current], array[begin]); current++; begin++; } else if (array[current] == 1) { current++; } else { swap(array[current], array[end]); end--; } } }
标签:
原文地址:http://www.cnblogs.com/vincently/p/4781010.html