快速排序是排序算法的一种,是不稳定的排序算法。
其思路是,将原数组A[p..r]划分为两个子数组(可能空)A[p..q-1]和A[q+1..r],使得A[p..q-1]中的每个元素都小于等于A[q],A[q+1..r]中的每个元素都大于等于A[q]。
使用快速排序法对一列数字进行排序的过程 | |
分类 | 排序算法 |
---|---|
数据结构 | Varies |
最差时间复杂度 | Θ(n2) |
最优时间复杂度 | Θ(nlogn) |
平均时间复杂度 | Θ(nlogn) comparisons |
最差空间复杂度 | 根据实现的方式不同而不同 |
最佳算法 | 有时是 |
算法中参考值A[q]选取为划分区间中的最后一个数。
C语言实现如下:
void quick_sort(int A[],int p,int r)
{
int q;
if(p < r)
{
q = partition(A, p ,r);
quick_sort(A, p ,q-1);
quick_sort(A, q+1, r);
}
}
int partition(int A[],int p,int r)
{
int x;
int i, j;
int temp;
x = A[r];
i = p - 1;
for(j = p; j < r; j++)
{
if(A[j] <= x)
{
i++;
temp = A[j];
A[j] = A[i];
A[i] = temp;
}
}
i++;
temp = A[r];
A[r] = A[i];
A[i] = temp;
return i;
}