快速排序(更新随机化快速排序)
2014-05-24 10:50
134 查看
快速排序也利用了分治的思想,跟归并排序排序相比减少了交换次数
为什么要引入随机化快速排序。这个问题从算法的根本出发点来说,就是为了效率的提升。在一般的快排中,重要的是选择主元对数组进行划分。如果原序列是有序的,那么最坏的情况下时间复杂度为O(n2).而随机化快速排序能将时间复杂度的期望控制在O(nlgn).与非随机化快排相比,利用随机数生成器随机产生了数作为主元。
int partition(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++; int t = a[i]; a[i] = a[j]; a[j] = t; } } int tmp = a[i+1]; a[i+1] = a[r]; a[r] = tmp; return i+1; } void quicksort(int a[],int p,int r) { if(p<r) { int q = partition(a, p, r); quicksort(a, p, q-1); quicksort(a, q+1, r); } }
为什么要引入随机化快速排序。这个问题从算法的根本出发点来说,就是为了效率的提升。在一般的快排中,重要的是选择主元对数组进行划分。如果原序列是有序的,那么最坏的情况下时间复杂度为O(n2).而随机化快速排序能将时间复杂度的期望控制在O(nlgn).与非随机化快排相比,利用随机数生成器随机产生了数作为主元。
int partition(int a[],int p,int r) { srand(unsigned(time(0))); int index = rand()%(r-p) + p; int x =a[r]; a[r] = a[index]; a[index] = x; int i = p - 1; int provit = a[r]; for(int j = p;j < r;j++) { if(a[j]<=provit) { i++; int t = a[j]; a[j] = a[i]; a[i] = t; } } int t = a[r]; a[r] = a[i+1]; a[i+1] = t; return i+1; }
相关文章推荐
- 快速排序与随机化快排运行速度实验比较
- 快速排序分析与随机化算法+快速排序的随机化版本
- 随机化快速排序(Java实现)
- 挖掘算法中的数据结构(三):O(n*logn)排序算法之 快速排序(随机化、二路、三路排序) 及衍生算法
- 快速排序与随机化快排运行速度实验比较
- 算法导论-排序(二)快速排序、随机化快速排序
- 排序 quick_sort 快排 算法 随机函数 rand() 快速排序的随机化版本
- 快速排序及其随机化(算法导论)
- 分治算法;随机化划分函数;快速排序;线性时间选择第K小元素;快速排序平均时间复杂度nlgn;
- 分治思想的应用:C++实现快速排序和随机化的快速排序
- 利用随机化的思想对快速排序进行优化
- 算法导论-第七章-快速排序:随机化快速排序C++实现
- 快速排序的随机化版本
- 算法导论第三版第七章快速排序(一般和随机化版本)
- 快速排序(随机化版本)
- 算法导论第三版第七章快速排序(一般和随机化版本)
- 快速排序和随机化快速排序(算法导论第七章)
- 算法基础4:快速排序(随机化版本)
- 算法导论第三版第七章快速排序(一般和随机化版本)
- 随机化的快速排序