导航:首页 > 源码编译 > 三色旗算法

三色旗算法

发布时间:2025-04-01 07:33:15

⑴ 看不懂三色旗算法

把这个题目用数字描述:

假设0代表蓝,1代表白,2代表红。现在有数组[2,0,2,1,1,0],要求不使用额外的内存空间,只用原地交换该数组中数字的方式,将数组变成[0,0,1,1,2,2]。

按照三色旗算法,解题步骤如下:

1. 首先假设下标L, R分别指向数组两端。再假设下标为M的数是正在处理的数字,M初始化指向数组中的第一个数。

2. M指向的数字为0时,将M和L指向的数交换,M+1,L+1

3. M指向的数字为1时,M+1,不进行交换

4. M指向的数字为2时,将M和R指向的数交换, R-1

5. 重复2.3.4步骤,直到M>R完成排序

将[2,0,2,1,1,0]用以上步骤排序:

  1. 按步骤1,初始化L=0指向2,R=5指向0,M=0指向2;

  2. M指向2,按上述步骤4,将M和R指向的数交换,R-1。数组为[0,0,2,1,1,2]。L=0指向2, R=4指向1, M=0指向0;

  3. M指向0,按上述步,2,将M和L指向的数交换,M+1,L+1。数组仍为[0,0,2,1,1,2],M=1指向0,L=1指向0,R不变

  4. M指向0,按上述步骤2,将M和L指向的数交换,M+1,L+1。数组仍为[0,0,2,1,1,2],M=2指向2,L=2指向2,R不变

  5. M指向2,按上述步骤4,将M和R指向的数交换,R-1。数组为[0,0,1,1,2,2]。L=2指向2, R=3指向1, M=2指向1;

  6. M指向1,按上述步骤3,M+1,M=3指向1,数组和LR均不变。

7. M指向1,按上述步骤3,M+1,M=4指向2。这时M=4 > R=3,由于M前都是处理过的数字,R后也都是处理过的数字,因此这时数组完成排序。

阅读全文

与三色旗算法相关的资料

热点内容
电脑编辑图片的app哪个好用 浏览:768
下载东西解压包不见了 浏览:27
excel表格怎么加密与只读 浏览:160
空调压缩机与冷气泵 浏览:738
对于程序员项目管理的分析 浏览:705
80d说明书pdf 浏览:935
通信加密机制合同是 浏览:490
先行服务器是什么鬼 浏览:249
刷安卓系统需要什么手机 浏览:274
数据图像加密 浏览:924
Python写一个类实现栈 浏览:102
ipad阅读器pdf 浏览:881
电钢琴pdf 浏览:592
安卓如何调和平画质 浏览:222
为什么程序员不注意自己外在 浏览:571
程序员那么可爱陆漓在哪里可以看 浏览:703
移动数据加密如何解决 浏览:98
tinyxml源码解析 浏览:962
cad中如何加密 浏览:345
linux终端光标移动 浏览:88