random quicksort
来源:互联网 发布:数据分析师报名条件 编辑:程序博客网 时间:2024/05/12 13:12
转自算法导论中文版7.3节
英文解释转自http://cs.stackexchange.com/questions/7582/what-is-the-advantage-of-randomized-quicksort
快速排序的随机化版本
快速排序的平均情况运行时间与最佳情况的运行时间很接近,而不是非常接近于最坏情况运行时间。
快速排序的平均情况是指假定输入数据的所有排列是等可能的。
可以在算法中加入随机化的成分,以便对于所有输入,它均能获得较好的平均情况性能。
很多人都认为,快速排序的随机化版本是对足够大的输入的理想选择。
RANDOMIZED-PARTITION(A, p, r)
1 i <- RANDOM(p,r)
2 exchange A[i]<-> A[r]
3 return PATITION(A, p, r)
RANDOMIZED-QUICKSORT(A, p, r)
1 if p < r
2 then q <- RANDOMIZED-PARTITION(A, p, r)
3 RANDOMIZED-QUICKSORT(A, p, q-1)
4 RANDOMIZED-QUICKSORT(A, q+1, r)
#include <stdio.h>#include <stdlib.h>void swp(int *a, int *b){int tmp = *a; *a = *b; *b = tmp;}int randomized(int p, int q){int size = q - p +1; return p + rand()%size;}int partation(int a[], int p, int r){ int x = a[r];int i = p -1; int j; for (j = p; j < r; j ++) {if (a[j] <= x) {i++; swp(&a[j], &a[i]);}} swp(&a[i+1], &a[r]); return i+1;}int random_partation(int a[], int p, int r){int i; i = randomized(p, r); swp(&a[i], &a[r]); return partation(a, p, r);}void random_quicksort(int a[], int p, int r){if (p < r) {int q = random_partation(a, p, r); random_quicksort(a, p, q-1); random_quicksort(a, q+1, r);}}int main(void){ int i; int a[] = {0, 3, 7, 1, 9, 3, 5, 4, 0, 9, 10}; random_quicksort(a, 1, 10); for (i = 1; i < 11; i++) {printf("%d ", a[i]);}return 0;}
0 0
- random quicksort
- Quicksort
- QuickSort
- quicksort
- quicksort
- QuickSort
- QuickSort
- QuickSort
- QuickSort
- QuickSort
- QuickSort
- quicksort
- QuickSort
- QuickSort
- QuickSort
- quicksort
- quicksort
- QuickSort
- 敏捷开发的6个实战经验
- Windows下实现Mencoder+FFMPEG视频转换和截图的功能
- 解决app在没有上传app store前大规模安装测试问题的一些办法与思路
- LaTeX技巧308:缩小参考文献间的垂直间距
- POJ1753 JAVA解题分析
- random quicksort
- javascript中文本框中输入法切换的问题
- JBoss 系列六十八:JBoss 7/WildFly 集群之有状态会话Bean集群 - II(示例)
- [wxWidgets]_[中级]_[自定义wxStaticText控件支持图片背景(透明背景)]
- Android设置TextView的Selector来控制点击的颜色
- 如何解决chm无法打开网页问题
- Ubuntu 12.04 安装 gcc-4.8 及 gdb 7.6
- ApacheBench简介
- oracle 导出空表