快速排序算法的基本特性:
时间复杂度:O(n*lgn)
最坏:O(n^2)
空间复杂度:O(n*lgn)
不稳定。
快速排序是一种排序算法,对包含n个数的输入数组,平均时间为O(nlgn),最坏情况是O(n^2)。
通常是用于排序的最佳选择。因为,基于比较的排序,最快也只能达到O(nlgn)。
//快速排序
void QuickSort(int a[], int left, int right);
//驱动程序
void QuickSort(int a[], int n){
QuickSort(a, 0, n - 1);
}
void QuickSort(int a[], int left, int right){
if (left < right){
int i = left;
int j = right;
int pivot = a[i]; //以第一个元素为枢纽元
while (i < j){
//从右向左找到第一个小于枢纽元的数
while (a[j]>pivot && i < j){
j--;
}
if (i < j){
a[i] = a[j];
}
//从左向右找到第一个大于枢纽元的数
while (a[i] < pivot && i < j){
i++;
}
if (i < j){
a[j] = a[i];
}
}
a[i] = pivot; //此时,i==j
//递归调用
QuickSort(a, left, i - 1);
QuickSort(a, i + 1, right);
}
else{
return;
}
}