数组------荷兰国旗问题(颜色排序)
2016-05-17 14:22
323 查看
问题描述:
现在有红、白、蓝三色小球若干个,要求对其进行整理,使得同色小球相邻。
思路:
参照快速排序的过程,但使用三个指针first, current 和 end.其中first和current从数组头开始,end指向数组尾。以0表示红色,1表示白色,2表示蓝色。则有:
(1) 当*current = 0 时,swap(*current, *first) 并且first++、current++ ;
(2) 当*current = 1 时,current++;
(3) 当*current = 2 时,swap(*current, *end) 并且end–;
现在有红、白、蓝三色小球若干个,要求对其进行整理,使得同色小球相邻。
思路:
参照快速排序的过程,但使用三个指针first, current 和 end.其中first和current从数组头开始,end指向数组尾。以0表示红色,1表示白色,2表示蓝色。则有:
(1) 当*current = 0 时,swap(*current, *first) 并且first++、current++ ;
(2) 当*current = 1 时,current++;
(3) 当*current = 2 时,swap(*current, *end) 并且end–;
#include <iostream> using namespace std; void colorSort(int *arr, int first, int end); int main() { int array[] = {0, 2, 2, 1, 1, 0, 0, 1, 2, 1, 2}; colorSort(array, 0, sizeof(array)/sizeof(int)-1); cout << "after sort: " << endl; for(int i = 0; i < sizeof(array)/sizeof(int); i++) { cout << array[i] << " "; } cout << endl; return 0; } void colorSort(int *arr, int first, int end) { if(arr == NULL || first >= end) return ; int current = first; while(current < end) { if(arr[current] == 0) { swap(arr[current], arr[first]); current++; first++; } else if(arr[current] == 1) { current++; } else { swap(arr[current], arr[end]); end--; } } }
相关文章推荐
- Mysql多实例安装
- 架构漫谈(一):什么是架构?
- 分词词云 logistic相关研究 2016.05.16回顾
- Settings.apk修改
- HDU 2665 Kth number 划分树
- UISegmentedControl的用法
- part1:15-安装Linux系统到开发板
- iOS 计时器 单例 GCD 切换控制器倒计时继续读秒
- ansible playbook 学习
- java基础第八天_多线程
- Netty 实现聊天功能
- 【Android】关于addTextChangedListener()方法的上机记录
- 杭电1495
- 简单的tcp服务
- org.apache.commons.lang3.ArrayUtils 学习笔记
- memcached添加IP白名单,只允许指定服务器调用
- 便携名片app
- 热补丁方案研究
- Iptables防火墙(基础知识)
- 前端之路