排序算法之快速排序的随机化版本
来源:互联网 发布:中国人工智能股票龙头 编辑:程序博客网 时间:2024/06/05 07:09
4.3 快速排序的随机化版本
这种方法并不是一种全新的排序算法,而是在快速排序的基础上加入随机化的因素,因素,因而仍然将其作为第四种方法(快速排序)的一种补充。
为什么要提出快速排序的随机化版本,主要是对于快速排序法其划分情况的好坏会直接影响排序的效率,而且,快速排序的平均性能较好,所以,加入随机化成分,可以使该算法对于所有输入均能获得较好的平均情况性能。
针对加入随机化的环节,选取的是选取主元的环节,因为主元的选取直接影响快速排序算法的数组划分。
C代码实现为:
#include <stdio.h>#include <random>//交换两数void exchange(int &a, int &b) {if(a!=b) {int temp = a;a = b;b = temp;}}//数组划分int portition(int a[], const int &start, const int &end){int x = a[end];int i = start;for(int j=start; j<end; j++) {if( x>a[j] ) {exchange(a[i], a[j]);i = i+1;}}exchange(a[i], a[end]);return i;}//随机选取主元int random_portition(int a[], const int &start, const int &end) {int indexRandom = rand()%(end-start+1) + start;exchange(a[indexRandom], a[end]);return portition(a, start, end);}//快速排序的随机化版本void random_quicksort(int a[], const int &start, const int &end){if( start<end ) {int mid = random_portition(a, start, end);if(mid!=0) {random_quicksort(a, start, mid-1);}random_quicksort(a, mid+1, end);}}int main(int argc, char** argv) {const int length = 25;int a[length];for(int i=0; i<length; i++){a[i] = rand()%100;}for(int i=0; i<length; i++) {printf("%d ", a[i]);}printf("\n");random_quicksort(a, 0, length-1);for(int i=0; i<length; i++) {printf("%d ", a[i]);}printf("\n");return 0;}
C++代码实现为:
#include <random>#include <iostream>#include <vector>using namespace std;//交换两数位置void exchange(int &a, int &b) {if(a!=b) {int temp = a;a = b;b = temp;}}//数组划分vector<int>::iterator portition(vector<int> &aVec, const vector<int>::iterator &itStart, const vector<int>::iterator &itEnd) {int x = *(itEnd);vector<int>::iterator i = itStart;for(vector<int>::iterator j=itStart; j<itEnd; j++) {if( x>*(j) ) {exchange(*(i), *(j));i = i+1;}}exchange(*(i), *(itEnd));return i;}//选取随机的主元vector<int>::iterator random_portition(vector<int> &aVec, const vector<int>::iterator &itStart, const vector<int>::iterator &itEnd) {vector<int>::iterator indexRandom = rand()%(itEnd-itStart+1) + itStart;exchange(*(indexRandom), *(itEnd));return portition(aVec, itStart, itEnd);}//快速排序的随机化版本void random_quicksort(vector<int> &aVec, const vector<int>::iterator &itStart, const vector<int>::iterator &itEnd) {if( itStart<itEnd ) {vector<int>::iterator mid = random_portition(aVec, itStart, itEnd);if(mid!=itStart) {random_quicksort(aVec, itStart, mid-1);}random_quicksort(aVec, mid+1, itEnd);}}int main(int argc, char** argv) {vector<int> a;for(int i=0; i<20; i++){a.push_back( rand()%100 );}for(vector<int>::iterator it=a.begin(); it<a.end(); it++) {cout<<*(it)<<" ";}cout<<endl;random_quicksort(a, a.begin(), a.end()-1);for(vector<int>::iterator it=a.begin(); it<a.end(); it++) {cout<<*(it)<<" ";}cout<<endl;return 0;}
2 0
- 排序算法之快速排序的随机化版本
- 经典算法--快速排序的随机化版本
- 快速排序的随机化版本
- 快速排序的随机化版本
- 快速排序的随机化版本
- 快速排序的随机化版本
- 快速排序分析与随机化算法+快速排序的随机化版本
- 快速排序的随机化算法
- 快速排序的随机化算法
- 快速排序(随机化版本)
- 快速排序随机化版本
- 快速排序随机化版本
- 快速排序 随机化版本
- 算法实践篇-快速排序-随机化版本
- 算法基础4:快速排序(随机化版本)
- 算法导论:快速排序及其随机化版本
- 快速排序之随机化版本(7)
- 随机化快速排序算法
- linux -- xinput 输入设备管理
- Linux下面开起启动服务命令(chkconfig、ntsysv)
- oracle 分割字符串 截取字符串
- Dozer轻松实现对象间属性复制
- 2014百度之星初赛(第二场)——Scenic Popularity
- 排序算法之快速排序的随机化版本
- 网页生成二维码的例子
- 外观(Facade)
- 通过TFTP服务器,往开发板下载程序
- SqlCommand.Parameters.Add()用法
- 递归的小结
- 二十一 --我在软件园的那些日子里
- Android.mk高级写法
- 十四周项目二形状类族中的纯虚数