快速排序的基本思想
快排的平均运行时间为O(N log N),是一种快速的分而治之的算法,也是已知的最快的排序算法。其基本思想是:
1.先从数列中取出一个数作为基准数(代码中采用选取数列第一个 中间 和最后一个这三个元素的中间值作为基准值)。
2.分区过程,将比这个数小或等于的数全放到它的右边,大于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数,或者区间小于某个长度时采用常规排序算法。
基准值的选择
基准值的选择影响快排的运行效率,其大小越接近待排数列的中间值,则效果越好。此处采用位置在数列的第一个元素,中间元素,和最后一个元素的中间值作为基准值。因此,当分而治之的子区间长度小于3时,可采用常规排序算法(如比较排序)来结束递归。
#include<iostream>
#include<vector>
#define CUTOFF 3
using namespace std;
template < class T >
void my_swap(T & lhs , T & rhs)
{
T temp = lhs;
lhs = rhs;
rhs = temp;
}
/*插入排序算法 当快速排序的递归子列小于一定长度时,采用比较排序算法*/
template<class T>
void compareSort(vector<T