快速排序是采用分治法(Divide and Conquer)的应用。和归并排序不同的是,她不需要额外的存储空间,时间复杂度: T(n) = Θ(nlgn),最坏情况下是:T(n) = Θ(n²)。
基本原理及实现
基本原理: 使用递归、分治的思想,每次调用排序方法,随机选取一个key值,结果保证:key值所在数组中的位置,且能保证key左侧位置的数据总小于key值;右侧位置数据总大于key值
- ① 当数组为空时,数组不需要排序,算法结束。
- ② 选取一个key值,可以是带排序数组中任意位置的元素,这里选第一个元素。
- ③ 遍历数组(角标j),将所有比key值小的元素移动到数组前边(角标i)。遍历结束时,i即是中间位置。
- ④ 将key值与角标i位置元素位置互换。
- ⑤ 递归对i位置左侧、右侧数组进行快速排序。
使用Swift编写简单的代码实现,如下:
测试用例及结果
|
|