几种排序分享--快速排序

快速排序


(这里参考自 狄泰 数据结构课程)

  1. 基本思想
    任取一个元素作为基准, 将数组分为两部分,
    一边序列是小于或等于 该基准
    一边序列是大于该基准
    基准元素排再该序列中间
    将两边序列又重复以上动作知道所有元素排好序 (递归思想)

    看下图
    在这里插入图片描述

  2. 直接上代码

template <typename T>
void Sort::Quick(T array[], int len, bool min2max)	//对外使用接口
{
    Quick(array, 0, len-1, min2max);
}

template <typename T>
void Sort::Quick(T array[], int begin, int end, bool min2max)
{
    if(begin < end)	
    {
        int mid = partition(array, begin, end, min2max);   //取开头元素为基准 将两边元素分开,返回基准元素位置
        Quick(array, begin, mid-1, min2max);	//左边序列进入排序
        Quick(array, mid+1, end, min2max);	//右边序列进入排序
    }
}
template <typename T>
int Sort::partition(T array[], int begin, int end, bool min2max)
{
    T e = array[begin];	//取开头元素为基准
    while(begin < end)
    {
        while(((begin < end) && (min2max ? (array[end] > e) : (array[end] < e))))
        {
            end--;	//若从小到大排序,只要右边未找到小于基准元素就下边往前移
        }
        Swap(array[begin], array[end]);	//找到交换位置

        while(((begin < end) && (min2max ? (array[begin] <= e) : (array[begin] >= e))))
        {
            begin++;	//同理
        }
        Swap(array[begin], array[end]); //同理
    }
  //  array[begin] = e;
    return begin; //返回基准元素位置
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值