博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快速排序
阅读量:6885 次
发布时间:2019-06-27

本文共 2058 字,大约阅读时间需要 6 分钟。

平均时间O(NlogN),最坏O(N^2)

 

主要过程四步:

1 如果S中元素为1 或者 0 ,直接返回

2 取S中的任一元素v,称为 枢纽元

3 将集合按照 枢纽元大小 分成两个集合

4 两个子集合递归调用2 - 3

 

选取枢纽元方法:

1错误方法:直接选取第一个

2安全方法: 随即选取一个枢纽元

3三数中值分割法:选取数组的中值

主要代码:

1 #include 
2 #include
3 using namespace std; 4 template
5 void quicksort( vector
& a) 6 { 7 quicksort(a,0,a.size()-1); 8 } 9 template
10 const Comparable & median3(vector
& a,int left,int right) 11 { 12 int center = (left + right)/2; 13 if(a[center] < a[left]) 14 swap(a[left],a[center]); 15 if(a[right] < a[left]) 16 swap(a[left],a[right]); 17 if(a[right] < a[center]) 18 swap(a[center],a[right]); 19 20 swap(a[center],a[right - 1]); 21 return a[right-1]; 22 } 23 template
24 void quicksort( vector
& a,int left,int right) 25 { 26 if(left + 10 <= right) 27 { 28 Comparable pivot = median3(a,left,right); 29 30 int i=left,j=right-1; 31 for( ; ; ) 32 { 33 while(a[++i] < pivot){} 34 while(pivot < a[--j]){} 35 if(i
48 void insertionSort(vector
& a) 49 { 50 int j; 51 for(int p = 1;p
0 && tmp
60 void insertionSort(const Iterator & begin,const Iterator & end,Comparator lessThan) 61 { 62 if(begin != end) 63 insertionSort(begin,end,lessThan,*begin); 64 } 65 template
66 void insertionSort(const Iterator & begin, const Iterator & end , Comparator lessThan,const Object & obj) 67 { 68 Iterator j; 69 for(Iterator p =begin+1;p != end;++p) 70 { 71 Object tmp = *p; 72 for(j=p; j!=begin && lessThan(tmp,*(j-1)); --j) 73 *j = *(j-1); 74 *j = tmp; 75 } 76 }*/ 77 int main() 78 { 79 vector
ivec; 80 ivec.push_back(1); 81 ivec.push_back(9); 82 ivec.push_back(2); 83 ivec.push_back(10); 84 ivec.push_back(3); 85 ivec.push_back(11); 86 ivec.push_back(4); 87 ivec.push_back(12); 88 ivec.push_back(5); 89 ivec.push_back(13); 90 ivec.push_back(6); 91 ivec.push_back(14); 92 ivec.push_back(7); 93 ivec.push_back(15); 94 ivec.push_back(8); 95 ivec.push_back(16); 96 quicksort(ivec); 97 for(int j = 0;j

代码执行中,因为没有insertionSort,所以暂时执行不了,insertionSort是插入排序,这样可以减少时间的消耗。

转载地址:http://xvtbl.baihongyu.com/

你可能感兴趣的文章
例题7-6 UVa140 Bandwidth(枚举+剪枝)
查看>>
java中static关键字的作用
查看>>
使用UIPageControl UIScrollView制作APP引导界面
查看>>
PyQt4 ShowHMDB show sqlite3 with QTableWidget summary
查看>>
你所能用到的BMP格式介绍(一)
查看>>
题目1489:计算两个矩阵的乘积
查看>>
raid
查看>>
LoadRunner学习第三天
查看>>
[转]缺少 ; (在标识符 PhysicalMediumType 的前面)
查看>>
redis
查看>>
C++11中的tuple应用:让函数返回多个值
查看>>
JSON.parse()和JSON.stringify()
查看>>
MySQL自学2018/03/30-DML语句
查看>>
Appium Desktop Inspector 安卓真机配置(Windows)
查看>>
vue+webpack 遇到的问题总结
查看>>
iOS开发多线程篇—GCD介绍
查看>>
2011百度校园招聘笔试题 C++类-附原创答案
查看>>
CI MSBuild env 2
查看>>
db2命令
查看>>
Oracle 补丁体系 及 opatch 工具 介绍
查看>>