前言
快速排序是交换排序中的一种,是Hoare于1962年提出的一种二叉树结构的交换排序方法,相似于二叉树的前序遍历。web
主要思想:
■ 任取待排序元素序列中的某元素做为关键字。
■ 按照该关键字将待排序集合分割成两子序列,左子序列中全部元素均小于基准值,右子序列中全部元素均大于基准值。
■ 而后将左右子序列重复该过程,直到全部元素都排列在相应位置上为止。数据结构
区间划分左右部分常见方式
一、双指针法
实现过程:以下图 !svg
过程总结:
■先将begin的索引做为keyIndex记录下来,而后使用两个指针,一个指向end,一个指向begin。
■让end指针先走,找比arr[keyIndex]小的值。而后begin指针开始走,找比arr[keyIndex]大的值。
■而后将begin指针和end指针找到的值交换,重复上述过程直到begin和end指针相遇。
■最后将a[end]和a[keyIndex]交换。性能
C语言代码实现
int PartSort1(int* a, int begin, int end) {
int keyIndex = begin;
//注意必定要让end先移动
while (begin < end) {
while (begin < end && a[end] >= a[keyIndex]) end--;//注意这个地方必定要取等
while (begin < end && a[begin] <= a[keyIndex]) begin++;//注意这个地方必定要取等
swap(a + begin, a + end);
}
swap(a + end, a + keyIndex)