荷兰国旗
来源:互联网 发布:电脑报 淘宝二手苹果 编辑:程序博客网 时间:2024/04/27 16:43
题目描述:现有n个红白蓝三种不同颜色的小球,乱序排在一起,请通过两两交换任意两个球,使得从左至右的球依次为红球白球蓝球。这个问题之所以叫荷兰国旗,是因为将红白蓝三色小球弄成条状物,并有序的排列后正好组成荷兰的国旗(图中球上标数字0的表示红球,1表示白球,2表示蓝球)
解法:需要三个指针,一个前指针begin,一个中指针current,一个后指针end,current指针
遍历整个数组序列:
(1)当current指针所指元素为0时,与begin指针所指的元素交换,然后current++,begin++;
(2)当current指针所指元素为1时,不做任何的元素交换(即不动球),然后current++;
(3)当current指针所指元素为2时,与end指针所指的元素交换,然后current不动,end–;(current指针与所指元素交换之后,current指针此刻指向0,此时指针不可动,与begin交换)
void RWBsort(int array[], int len){ int begin = 0; int current = 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--; } }}int main(){ int array[] = {2,0,1,0,0,2,1,1,2}; int length = sizeof(array)/sizeof(array[0]); RWBsort(array, length); for(int i=0; i<length; ++i) { cout<<array[i]<<" "; } cout<<endl; system("pause"); return 0;}
阅读全文
0 0
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗问题
- 荷兰国旗问题
- 【算法】荷兰国旗
- 荷兰国旗问题
- 荷兰国旗问题
- [PAT-乙级]1063.计算谱半径
- Ubuntu(Linux)比Windows的优点(纯个人感受,无任何引用抄袭)
- 顺序表笔记
- 内部类大展身手 ———— 有抽象类的多继承
- 对最初脚本的扩展完善版本CheckAndNaming Tool
- 荷兰国旗
- POJ
- codeforces 20 c 堆优化dijkstra + 路径打印
- 去掉select 标签的 默认箭头
- SC命令注册服务的方法
- 805B
- 2017 计蒜之道 初赛 第一场 A题B题
- java三大体系
- Kotlin(七)