荷兰国旗
来源:互联网 发布:excel2003软件官方下载 编辑:程序博客网 时间:2024/04/19 01:32
题目:
拿破仑席卷欧洲大陆之后,代表自由,平等,博爱的竖色三色旗也风靡一时。荷兰国旗就是一面三色旗(只不过是横向的),自上而下为红白蓝三色。该问题本身是关于三色球排序和分类的,由荷兰科学家Dijkstra提出。由于问题中的三色小球有序排列后正好分为三类,Dijkstra就想象成他母国的国旗,于是问题也就被命名为荷兰旗问题(Dutch National Flag Problem)。
下面是问题的正规描述:
现有n个红白蓝三种不同颜色的小球,乱序排列在一起,请通过两两交换任意两个球,使得从左至右,依次是一些红球、一些白球、一些蓝球。
思路:和快速排序有点类似
#include <stdio.h>#include <stdlib.h>#include <string.h>void swap(char *a, char *b){ char tmp = *a; *a = *b; *b = tmp;}/*说明:现有n个红白蓝三种不同颜色的小球乱序排列在一起,请通过两两交换任意两个球使得从左至右,依次是一些红球、一些白球、一些蓝球*/void sortDNFP(char* s, int n){ int cur = 0; int end = n-1; int red = 0; while (cur <= end) { /*遇到红球直接交换*/ if (s[cur] == 'r') { swap(&s[cur], &s[red]); cur++; red++; } /*遇到白球直接cur++*/ else if (s[cur] == 'w') { cur++; } /*遇到蓝球,交换,但是cur不能动*/ else if (s[cur] == 'b') { swap(&s[cur], &s[end]); end--; } else { /*do nothing*/ } }}int main(){ char s[] = "rwbwbrwbrbrw"; sortDNFP(s, strlen(s)); printf("%s\n", s); return 0;}
0 0
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗
- 荷兰国旗问题
- 荷兰国旗问题
- 【算法】荷兰国旗
- 荷兰国旗问题
- 荷兰国旗问题
- 星际穿越
- java的ThreadLocal简介和示例
- VM下安装Centos 出现的错误 RAM not enough
- 线程同步辅助类
- 一些滤波操作1403:图像处理基础部分
- 荷兰国旗
- 【cocos2dx】对cocos2d 之autorelease\ratain\release的理解
- 2.1 Java程序的构成
- UVa 10129 - Play on Words(DFS判连通+欧拉回路)
- Android 3D 实验总结
- windbg 操作整理 : search, modify, save
- Android中的文件读写全面总结
- 奇偶调序
- android 定时任务的几种实现方式