快速排序算法是常见的排序算法的一种,其思想为:
1)任选无序区的一个元素作为基准
2)对无序区进行划分,小于基准的元素位于基准左边,大于基准的元素位于基准右边
3)对左右两个子序列递归调用算法
由于每一次调用,均可以保证至少一个元素在其最终的位置上,因此该算法总是可以结束的。算法的核心是对无序区的划分,一般声明为partion()方法。该方法接受一个无序区,并且返回划分后的索引,即基准位置的索引。
partion()方法的功能可以概括为,根据某一个基准(条件),将输入序列划分为两个子序列输出,并给出分界点,这种方法不仅仅适用于排序。根据条件的不同,可以完成各种划分,比如:
将序列分为奇数部分与偶数部分
将字母序列按照大小写分开等等
partion()函数的实现也分为两个部分,一个即构造划分条件,接下来根据条件扫描数组进行划分。以下是一个快速排序中partion的实现
int partion(int a[], int n, int start, int end)
{
assert(a != NULL && n > 0);
int pivotIndex = (start + end) / 2;
int pivot = a[pivotIndex];
int index = start;
/* 根据基准元素进行划分,划分时元素的分布情况为
|有序区 < 基准 | 有序区 >= 基准 | 无序区| 基准元素 |
其中,index指向第二个区域的第一个元素ÿ