算法导论-排序(二)快速排序、随机化快速排序
2014-09-13 17:50
555 查看
目录
1、本文介绍
2、快速排序
3、随机化快速排序
4、完整源码
5、参考资料
内容
1、本文介绍
主要内容分为两部分,一部分是介绍快速排序算法,分析其在最好、最坏以及最好最差交替出现情况下的算法效率;另一部分则是介绍随机化快排算法,以及分析其算法复杂度。最后给出c++实现代码。2、快速排序
快速排序也是基于分治思想,首先把要排序的数组分为两份,然后再分别对分好的子数组进行快速排序。当子数组为1个元素时递归介绍,排序完成。快速排序属于“原地排序”,就是说在原有的数组内存上排序、不占用其他内存。归并排序就不一样,它则需要额外的空间来进行归并排序操作。下图是快速排序的分治思想:#include <iostream> #include <vector> #include <time.h> #include <Windows.h> using namespace std; #include "Sort.h" #include "CTimer.h" #define N 10 //排序数组大小 // 随机参数排序数组 void Random(vector<int> &a,int n) { int i=0; srand( (unsigned)time( NULL ) ); while(i<n) { a[i++]=rand(); } } int main() { Sort<int> sort1; CTimer t; vector<int > vec_int(N); Random(vec_int,N); cout<<"源数组:"; sort1.print_element(vec_int); t.Start(); sort1.Quick_Sort(vec_int,0,vec_int.size()-1); cout<<"快速排序:"<<t.End()<<"ms"<<endl; sort1.print_element(vec_int); Random(vec_int,N); t.Start(); sort1.Random_Quick_Sort(vec_int,0,vec_int.size()-1); cout<<"随机化快速排序:"<<t.End()<<"ms"<<endl; sort1.print_element(vec_int); Random(vec_int,N); t.Start(); sort1.insertion_sort(vec_int); cout<<"插入排序:"<<t.End()<<"ms"<<endl; sort1.print_element(vec_int); Random(vec_int,N); t.Start(); sort1.merge_sort(vec_int,0,vec_int.size()-1); cout<<"归并排序:"<<t.End()<<"ms"<<endl; sort1.print_element(vec_int); system("PAUSE"); return 0; }
View Code
输出:
排序算法时间比较:
数组大小 | 快速排序(ms) | 随机化快速排序(ms) | 插入排序(ms) | 归并排序(ms) |
10 | 0.0054523 | 0.00673552 | 0.00481085 | 0.0189227 |
100 | 0.108084 | 0.107763 | 0.377492 | 0.232845 |
1000 | 1.71427 | 1.47212 | 49.5864 | 2.67323 |
10000 | 34.795 | 19.2226 | 3542.74 | 30.3318 |
100000 | 232.691 | 233.02 | 352846 | 350.414 |
1000000 | 3032.3 | 3273.46 | ......(太大、没测) | 4017.02 |
自我小结:对随机产生的数组进行排序,1)可以发现插入排序没有优势、特别是数组比较大时耗时太多;2)快速排序、随机化快速排序、归并排序性能不错,然而两种快排比归并排序性能好点;3)当数据量变大时,可以看出性能排序为快速排序、随机化快速排序、归并排序、插入排序;4)由于这里的数组是由随机数产生的,没有显示出随机化快速排序的优势,但是当数组为已排序情况下随机化快排将比快排性能好。
5、参考资料
【1】http://blog.csdn.net/xyd0512/article/details/8259382【2】/article/1347608.html
【3】/article/6957256.html
相关文章推荐
- 算法导论-第七章-快速排序:随机化快速排序C++实现
- 第七章快速排序之“快速排序的随机化版本RANDOM-QUICKSORT”
- 算法导论 第七章快速排序与随机快速排序
- 算法导论 第七章快速排序与随机快速排序
- 《算法导论》笔记 第7章 7.3快速排序的随机化版本
- 《算法导论》笔记 第7章 7.3快速排序的随机化版本
- 算法导论(一):快速排序与随机化快排
- 算法导论 第2版 7.3 快速排序随机化版本
- 算法导论-第7章 - 快速排序
- 挖掘算法中的数据结构(三):O(n*logn)排序算法之 快速排序(随机化、二路、三路排序) 及衍生算法
- 算法导论第三版第七章快速排序(一般和随机化版本)
- 快速排序算法原理及实现(单轴快速排序、三向切分快速排序、双轴快速排序)
- 算法导论-----快速排序
- 算法导论第七章-快速排序-Cpp代码实现
- 快速排序的随机化版本代码
- 《算法之美》---快速排序(随机快速排序)
- 算法导论_第七章_快速排序
- 算法导论—快速排序
- 算法导论第三版第七章快速排序(一般和随机化版本)
- 算法导论:快速排序