本文主要用C++总结快速排序算法原理和代码。
1.1快速排序算法原理
快速排序的时间复杂度最坏为,平均时间复杂度为,采用了分而治之思想,是不稳定算法(一趟排序后,数列中原来前后位置顺序不变)。具体实现原理如下:
a1 从数列中任意选取一个数作为基准数(枢轴,pivot)
a2 遍历数列,将小于基准数的数放在基准数左边,大于基准数的数放在基准数右边;
a3 对左右区间数列重复a1——a2过程,直到每个区间有且只有一个数为止。
1.2具体代码实现思路
b1 选取数列第一个数为基准数;
b2 分别从左右两边同时遍历。从左边依次向右遍历,找出第一个大于基准数的下标;同时从右边开始遍历,找出第一个小于基准数的下标;将两下标数据互换,完成第一次排序;接着当前下标循环查找“逆序对”,找到就交换,直到左边下标不小于右边下标,则停止“逆序排