实现常用排序算法(一)快速排序
今天来徒手造轮子了,这次是快排!
简介
快速排序(Quick Sort)是非常常用的排序算法,平均时间复杂度为,最坏复杂度,是一种不稳定排序。虽然有的最坏复杂度,但是快排在实践中的效率通常优于其他算法,这也是c++中的std::sort
主要使用快排进行排序的原因(std::sort
是混合排序算法,并非单一的快排,有空会出一篇文章解析一下其源码)
快排是典型的分治算法,快排选取一个基准值将数组按大小分成两份,一份大于基准值,一份小于基准值,然后对这两份分别递归地进行排序。
在具体实现中,通常用双指针完成这个划分操作,维护两个指针i、j,1到i-1储存pivot的数,j+1到n储存pivot的数,然后让i往前,j往后,如果i、j指向的两个元素都不符合条件只需要让两个元素交换就行了,一直移动i、j指针直到两个指针相遇,即完成了划分,然后再递归地进行。
实现
1 | void quickSort(int *begin, int *end){ |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Cyrus' Blog!
评论