C/C++ 快速排序例程(含代码,可执行)

本文介绍了快速排序算法的原理及其平均时间复杂度O(N*logN),指出在数据量大且无序时的优势。文章通过详细步骤解释了快速排序的过程,包括取基数、交换分区和递归操作。当数据有序时,快速排序性能下降,但可以通过随机选取基数优化。文中提供了可执行的C/C++代码,并讨论了避免最坏情况的策略。
摘要由CSDN通过智能技术生成

        快速排序的排序思想为分治法,其时间复杂度平均为为O(N*logN),高于冒泡排序等,在数据量较大且无序时,快速排序的效率较高,常常被使用。快速排序是在原数据结构上进行操作,但由于其递归使用栈空间,平均空间复杂度为 O(logn)。

        当数据有序时,快速排序复杂度会上升,最坏的情况下需要进行n‐1递归调用,其空间复杂度为O(n),但可通过取随机数作为基数的办法进行优化,这在后面作讨论。

        快速排序的基本思想是:

        1.取基数:首先从数列中取出一个数作为基数,记得保存该数。

        2.交换/分区:将比基数大的数全放到它的右边,小于或等于它的数全放到它的左边;这样便得到左右分区,右分区中的数 >= 左分区的数,但每个分区中的数仍是无序的。

        3.递归:再对左右区间重复进行第二步的操作,直到当各个区间只有一个数时,排序结束。

代码如下:

可以成功执行


#include <iostream>
#include <vector>

using namespace std;

/*
函数名:quick_sort
参数:
    arry: 待排序容器的指针
    left: 待排序的区间的左下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值