三色排序问题/(荷兰国旗问题)(C++版)
来源:互联网 发布:photoshop cc mac补丁 编辑:程序博客网 时间:2024/04/18 19:09
题目:
有一个只由0,1,2三种元素构成的整数数组,请使用交换、原地排序而不是使用计数进行排序。
给定一个只含0,1,2的整数数组A及它的大小,请返回排序后的数组。
算法复杂度:
时间 O(N)
空间 O(1)
贴代码:
void swap(int *p1, int *p2){int temp = *p1;*p1 = *p2;*p2 = temp;}vector<int> sortThreeColor(vector<int> A, int n) {// 0 区域 2区域int idx0 = 0, idx2 = n - 1;for(int i = 0; i < n;){// ==0 交换当前元素和0区的下一个位置(右) 遍历下一个if(A[i] == 0){swap(&A[i], &A[idx0]);idx0++;++i;}// ==2 交换当前元素和2区的下一个位置(左)else if(A[i] == 2){// 还未遍历到2区 交换if (i < idx2){swap(&A[i], &A[idx2]);idx2--;}// 否则 直接遍历下一个else{++i;}}// ==1 遍历下一个else if(A[i] == 1){++i;}}return A;}
int main(void){int a[6] = {0,1,1,0,2,2};vector<int> v(a, a + 6);ThreeColor tc;v= tc.sortThreeColor(v, 6);for (int i = 0; i < 6; ++i){cout<<v[i];}return 0;}
001122
0 0
- 三色排序(荷兰国旗问题)
- 荷兰国旗问题,三色排序
- 三色排序问题/(荷兰国旗问题)(C++版)
- 荷兰国旗/三色排序
- 三色棋问题(荷兰国旗问题)
- 75. Sort Colors--荷兰三色国旗问题
- 三色球和荷兰国旗问题 分析 c语言代码详解
- 荷兰国旗问题--快速排序的变种
- 奇偶数排序,荷兰国旗问题
- 数组------荷兰国旗问题(颜色排序)
- 荷兰国旗问题(改造快速排序)
- 排序相关——荷兰国旗问题
- 荷兰国旗问题
- 荷兰国旗问题
- 荷兰国旗问题
- 荷兰国旗问题
- 荷兰国旗问题
- 荷兰国旗问题
- 网站开发进阶(十七)Html元素隐藏的几种方式
- 初识体系结构
- css:-webkit-overflow-scrolling: touch;
- 一张图简单了解HTML5
- 网络基础之网络参考模型 + 网络协议
- 三色排序问题/(荷兰国旗问题)(C++版)
- 基于CSS3的苹果套件
- grub 解析
- 1087. All Roads Lead to Rome (30)
- 50道Java线程面试题
- 杭电ACM1248(完全背包)
- 标记文件
- Linux进程间通信(IPC)编程实践(八)共享内存的使用-POSIX 共享内存(API)
- Bmob文档阅读1-快速接入