荷兰国旗排序问题对应的快速排序方法
来源:互联网 发布:广州明动软件 知乎 编辑:程序博客网 时间:2024/05/02 01:12
荷兰的国旗是由红、白、蓝三种,问题为时间复杂度为o(n)的情况下,按颜色依次排为红、白、蓝三种。
代码的逻辑如下,并不复杂,所占用的空间复杂度为o(1)
int *Test::Sort(int *k, int counts){int j = 0, i = 0,n=counts-1;while (j<=n){switch (k[j]){case 0:swap(k[i], k[j]);i++; j++;break;case 1:j++;break;case 2:swap(k[j], k[n]);n--;break;}}return k;}
红白蓝三种情况,如果再考虑一次的话其实是对应的大于、小于和等于三种情况。可以用这种方法实现对快排的改版,挑选出比关键字大的和小的数,分别放在左边和右边。但是相比快速排序partition方法,不易找出初始值,(这里的查找方法逻辑比较杂,通过判断两个数是否是需要交换的数,是的话则重新对关键字赋值。其实比较逻辑可以放在swap方法中,这里就不在赘述了。)
int *Test::Compare_Sort(int *k,int low,int high){ int j = 0, i = 0, n = high; int keys=low; int index = k[low]; int values; while (j <= n) { values = k[j] - index; if (values < 0) { if (i == keys || j == keys) { if (j == keys) { swap(k[i],k[j]); keys = i; } else { if (i == keys) { swap( k[i], k[j]); keys =j; } } } if(j!=keys&&i!=keys) swap( k[i], k[j]); i++; j++; } if (values == 0) { j++; } if (values>0) { if (j == keys||n==keys) { if (j == keys) { swap( k[n], k[j]); keys = n; } else { if (n == keys) { swap( k[n], k[j]); keys = j; } } } if(n!=keys&&j!=keys) swap( k[j], k[n]); n--; }}
实验结果显示该方法的效率和快排相差小。
0 0
- 荷兰国旗排序问题对应的快速排序方法
- 荷兰国旗问题--快速排序的变种
- 荷兰国旗问题(改造快速排序)
- 三色排序(荷兰国旗问题)
- 荷兰国旗问题,三色排序
- 荷兰国旗问题和三路快速排序的一种实现
- 荷兰国旗排序
- 荷兰国旗/三色排序
- 奇偶数排序,荷兰国旗问题
- 数组------荷兰国旗问题(颜色排序)
- 排序相关——荷兰国旗问题
- 荷兰国旗排序的几种解法
- 三色排序问题/(荷兰国旗问题)(C++版)
- 查找排序实战---荷兰国旗问题(leetcode 75)
- 【Sort】75. Sort Colors(计数排序、荷兰国旗问题)
- 小程序:荷兰国旗问题 (大小写字母数字排序问题)包含代码
- 荷兰国旗问题
- 荷兰国旗问题
- 软件测试,想说爱你不容易
- scala的for循环 :枚举的“瑞士军刀”
- ORACLE_SQL语句总结
- 进程中多线程共享变量
- Unfortunately 程序名 has stopped的解决方法
- 荷兰国旗排序问题对应的快速排序方法
- 让Android虚拟手机快速启动
- eclipse开发android入门学习
- Eclipse和Android Studio下使用Google Gson解析Json数据示例
- iOS基础(foundation)-数组
- mysql导入外部sql脚本的方法
- 数据挖掘入门到进阶
- Python --- Flask : 另一个轻量级Web Server
- iOS 发布错误,ERROR ITMS-9000:"Invalid Code Signing Ent