一 算法描述
快速排序算法是一种利用分治策略进行排序的算法,因此其过程也包含分解、解决以及合并三个子过程。
分解:数组A[p..r]被划分为两个(可能为空)的子数组A[p..q-1]和A[q+1..r],使得A[p..q-1]中的每一个元素都小于等于A[q], 而A[q+1..r]中的每个元素都大于等于A[q]。
解决:通过递归调用快速排序,对数组A[p..q-1]和A[q+1..r]进行排序。
合并:因为子数组都是原址排序的,所以不需要合并。
二 算法实现
1 算法的关键步骤为第一步的分解操作,它选择待排数组的最后一个元素作为主元,其他元素通过比较与主元的相对大小来确定自己的位置。其实现如下:
private static int Partition(int[] array, int p, int r)
{
int x = array[r];
int i = p - 1;
for (int j = p; j < r; j++)
{
if (array[j] < x)
{
i++;
Exchange(ref array[i], ref array[j]);
}
}