排序算法--快速排序

本文介绍了快速排序的基本思想和实现步骤,包括采用分而治之的策略,以选取数列中三个位置的中间值为基准进行分区。讨论了基准值选择对排序效率的影响,并提出当子区间长度小于3时,可转用常规排序算法结束递归。
摘要由CSDN通过智能技术生成

快速排序的基本思想

快排的平均运行时间为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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值