快速排序也是典型的分治策略实现,与归并排序不同,快排的关键部分在于 分 也就是partition部分,快排平均时间复杂度是O(nlgn),最差时间是O(n^2),属于不稳定排序
下面是快排的C语言实现。
//p, r分别是数组中元素的下标
int partition(int A[], int p, int r)
{
int i, j;
i = p - 1;
for(j = p; j < r; j++) {
if (A[j] <= A[r]) {
swap(&A[++i], &A[j]);
}
}
//i总是最后一个满足小于等于A[r]的元素
swap(&A[i + 1], &A[r]);
return i + 1;
}
void quicksort(int A[], int p, int r)
{
if (p < r) {
int q = partition(A, p, r);
quicksort(A, p, q - 1);
quicksort(A, q + 1, r);
}
}