针对相同元素值的快速排序
来源:互联网 发布:风暴大陆升阶数据 编辑:程序博客网 时间:2024/05/22 15:12
如果数组中的元素值都相同,随机化的快速排序的运行时间将为
因此,可以考虑对PARTITION过程进行优化。使新的PARTITION排列数组A[p..r]的元素,返回值是两个数组的下标q和t,其中
1. A[q..t]中所有的元素都相同
2. A[p..q-1]中的每个元素都小于A[q]
3. A[t+1..r]中的每个元素都大于A[q]
算法C语言实现如下:
typedef struct pivot{ int q; //head to q - 1 for elements less than pivot int t; //q to t for elements equal to pivot} pivot_t;pivot_t partition_for_reduplicate_elem(int *source, int head, int tail) { int temp = source[tail]; int q = head - 1; int t = head - 1; for (int j = head; j < tail; ++j) { if (source[j] == temp) { t++; swap(source + j, source + t); } else if (source[j] < temp) { q++; swap(source + j, source + q); t++; if (t != q) swap(source + j, source + t); } } q++; swap(source + tail, source + q); t++; if (t != q) swap(source + tail, source + t); pivot_t result = {q, t}; return result;}pivot_t randomized_partition_for_reduplicate_elem(int *source, int head, int tail) { swap(source + rand() % (tail - head + 1) + head, source + tail); return partition_for_reduplicate_elem(source, head, tail);}void quick_sort_for_reduplicate_elem(int *source, int head, int tail) { if (head >= tail) return; pivot_t result = randomized_partition_for_reduplicate_elem(source, head, tail); quick_sort_for_reduplicate_elem(source, head, result.q - 1); quick_sort_for_reduplicate_elem(source, result.t + 1, tail);}
关于该种方法的复杂度分析,并不知道怎么算,原题见算法导论第三版思考题7-2,答案。
阅读全文
0 0
- 针对相同元素值的快速排序
- 算法导论7-2,针对相同元素的快速排序
- 算法导论-7-2 针对有相同元素值的快速排序
- 算法导论第七章思考题7-2针对相同元素的快速排序-c++
- 快速排序(Java),针对重复元素
- java 两个相同元素的List,合并排序去除重复元素的快速算法
- 数组中去掉相同的元素, 排序
- 删除任意数组中相同的元素 , 删除排序后的数组中相同的元素
- 快速为所有数组元素赋相同的值以及在switch中的应用
- 快速找出List集合的相同与不同元素集合
- jQuery Validate--针对多个相同名称的元素的验证
- List集合针对元素中包含的字符串排序
- 算法导论 改进快排(2)----针对相同元素值 7.2
- 针对重复键值的3路快速排序算法
- 冒泡排序后分类相同ID的元素
- 冒泡排序后分类相同ID的元素
- oc统计数组相同元素的个数,以及数组排序
- 过滤相同的元素
- J
- JAVA企业面试题精选 Servlet和JSP 41-48
- hadoop集群普通用户安装时,jps命令运行报错
- 乘坐公交(贪心算法)
- OpenJudge百炼-2737-大整数除法-C语言-高精度计算
- 针对相同元素值的快速排序
- mysql 数据引擎
- Android源码编译时jdk冲突解决办法
- spring-cloud-consumer消费者(四)
- 纯css 制作音谱跳动效果
- Python:whl文件是神?如何安装whl文件?
- Shiro的使用详解(干货)
- 读取Excel数据截断问题
- 如何成为全栈工程师,这些技能是你必须具备的!