31-三色旗问题(荷兰国旗问题)
思路:
使用三个指针维护三个区间
代码实现:
#include <stdio.h>typedef enum {BLUE = 1,WHITE = 2,RED = 3
} Color;Color arr[] = {RED, BLUE, RED, WHITE, WHITE, RED, WHITE, BLUE, BLUE, RED, WHITE};void Swap(Color* arr, int i, int j) {Color t = arr[i];arr[i] = arr[j];arr[j] = t;
}void Print(Color* arr, int n) {for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");
}void Sort(Color* arr, int n) {int i = 0;int j = 0;int k = n - 1;while (i <= k) {if (arr[i] == BLUE) {Swap(arr, i++, j++);} else if (arr[i] == WHITE) {i++;} else if (arr[i] == RED) {Swap(arr, i, k--);}}return;
}int main() {int n = sizeof(arr) / sizeof(arr[0]);Print(arr, n);Sort(arr, n);Print(arr, n);
}
运行结果:
31-三色旗问题(荷兰国旗问题)相关推荐
- python单链表实现荷兰国旗问题_这道荷兰旗问题,我面试时遇到三次!
01.题目示例 "荷兰国旗问题" 是计算机科学中的一个经典题目,它是由Edsger Dijkstra提出的.荷兰国旗由红.白.蓝三色组成. 荷兰国旗问题:现在有若干个红.白.蓝三种 ...
- 荷兰国旗 Flag of the Kingdom of the Netherlands
问题描述:现有n个红白蓝三种不同颜色的小球,乱序排列在一起,请通过两两交换任意两个球,使得从左至右的球依次为红球.白球.蓝球.这个问题之所以叫做荷兰国旗,是因为将红白蓝三色的小球弄成条状物,并有序排列 ...
- Algorithm:C+语言实现之数组相关算法(和为定值的两个数、和为定值的m个数、荷兰国旗、长度为2n的洗牌算法、任意长度数组的洗牌算法)
Algorithm:C+语言实现之数组相关算法(和为定值的两个数.和为定值的m个数.荷兰国旗.长度为2n的洗牌算法.任意长度数组的洗牌算法) 目录 数组 1.寻找和为定值的两个数 2.和为定值的m个数 ...
- 算法练习day4——190321(小和、逆序对、划分、荷兰国旗问题)
归并排序快的原因: 后面的排序利用了前面排序的结果!!! 1.小和问题 在一个数组中, 每一个数左边比当前数小的数累加起来, 叫做这个数组的小和. 求一个数组的小和. 例子:[1,3,4,2,5] 1 ...
- leetcode 75. Sort Colors | 75. 颜色分类(荷兰国旗问题,快速排序)
题目 https://leetcode.com/problems/sort-colors/ 题解 快速排序3.0(随机快排+荷兰国旗技巧优化) 在arr[L-R]范围上,进行快速排序的过程: 1)在这 ...
- 【算法习作】荷兰国旗问题
1.问题描述: 我们将乱序的红白蓝三色小球排列成有序的红白蓝三色的同颜色在一起的小球组.这个问题之所以叫荷兰国旗,是因为我们可以将红白蓝三色小球想象成条状物,有序排列后正好组成荷兰国旗. 2. ...
- 荷兰国旗问题(分三块)
在说 "荷兰国旗" 问题之前,首先来看一个引例. 给定一个数组arr,和一个数num,请把小于等于num的数放在数组的左边,大于num的数放在数组的右边.要求额外空间复杂度O(1) ...
- 【算法】荷兰国旗问题
本文为博主九师兄(QQ:541711153 欢迎来探讨技术)原创文章,未经允许博主不允许转载. 文章目录 1.概述 2.问题一 2.1 暴力方法 2.2 双指针方法 1.2 问题二(荷兰国旗问题) 1 ...
- python单链表实现荷兰国旗问题_快速排序深入之荷兰国旗问题
一.序言 在使用partition-exchange排序算法时,如快速排序算法(即使选择了一个好的关键元素pivot values),我们往往面临一个很尴尬的境地--当排序对象中有很多重复的元素,pa ...
- 荷兰国旗问题(三元素数组排序问题)
荷兰国旗是红白蓝三个横条,荷兰国旗问题就是一个排序问题,这个待排数组只包含0,1,2三种元素. import randoma = [random.randint(0, 2) for i in rang ...
最新文章
- python实现 “不带中括号”输出列表中的数据
- 独木舟上的旅行http://acm.nyist.net/JudgeOnline/problem.php?pid=71
- 2、创建视图(CREATE VIEW)
- aliyun tianchi ai contest meeting note
- 当Java 8 Streams API不够用时
- [html] 浏览器是怎么对HTML5的离线储存资源进行管理和加载的
- 2019春第六周编程总结
- 实时数据产品实践——美团大交通战场沙盘
- java i o教程_Java I/O系统
- 面试问题记录 (一)
- 柯马机器人示教器编程_COMAU柯马机器人示教器无显示维修过程
- 如何一键重装Win7系统 便捷重装Win7系统教程
- (八)51单片机基础——LED点阵屏
- 调试: Rose逆向工程时死机.
- AES加解密 随机向量 密文一次一变 C#与PHP 程序加解密互通
- 组织机构树数据库表设计
- 凯云水利水电造价工程系统 (三) 材料单价模块(1)
- python二次方程_怎么用python解一元二次方程?
- yield 跟 yield * 的区别
- java开发工程师英文_java工程师英文简历范文