快速排序算法C++实现

本文介绍了快速排序的原理,通过找到主元将数组分为两部分,并递归地对这两部分进行排序,最终得到升序排列的数组。文章提供了详细的伪代码及C++代码实现。
摘要由CSDN通过智能技术生成

1、快速排序的原理是:找到一个主元,将无序的数组分为两部分,比主元大的和比主元小的,以升序为例,将比主元小的依次放在主元的左边,比主元大的一次放在主元右边。对主元左边的再使用快速排序,一直到数组只有两个元素,则将会生成有序的数组,依次对主元右边的进行上述操作即可获得有序数组。

2、伪代码

PARTITION(Arr , left , right){
    //选择主元
    pca = Arr[right];
    //下标量(比主元大或小的元素应该放置的位置)
    index = left -1;
    for i = left to right-1    //主元就不用比较了
        if Arr[i] <= pca    //扫到的元素比主元小,就将其放到最左边
            index++;        //有比主元小的了,往后一位,如果下次有的话就放到下一个位置
            swap(Arr[index] , Arr[i])

    //循环完毕后,将主元放到中间。此时的index指向的是一个比主元小的元素的位置,
    //其下一位就是不比主元小的元素,将主元换到index+1即可;
    swap(Arr[index+1],Arr[right])

    //甩出来主元的位置,用于子数组的划分
    return index+1
}

QuickSort(Arr , left , right)
    if left < right
        pca = Partition(Arr , left , right)
        QuickSort(Arr , left , pca - 1);
        QuickSo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值