对于包含n个数的输入数组来说,快速排序是一种最坏情况时间复杂度为O(n^2)的排序算法。虽然最坏情况时间复杂度很差,但是快速排序通常是实际排序应用中最好的选择,因为它的平均性能非常好:它的期望时间复杂度是O(nlgn),而且O(nlgn)中隐含的常数因子非常小,另外他还能够进行原址排序,甚至在虚拟环境中也能很好地工作。下面是快速排序的C++实现代码及运行结果:
/*
对SUM个数进行快速排序
*/
#include <iostream>
#include <ctime>
using namespace std;
const int SUM = 10;
int partion(int A[], int p, int r)
{
int x = A[r], i = p - 1, temp;
for (int j = p; j < r; j++)
{
if (A[j] <= x)
{
i = i + 1;
temp = A[j];
A[j] = A[i];
A[i] = temp;
}
}
temp = A[i + 1];
A[i + 1] = A[r];
A[r] = temp;
return i + 1;
}
void quicksort(int A[], int p, int r)
{
int q;
if (p < r)
{
q = partion(A, p, r);
quicksort(A, p, q - 1);
quicksort(A, q + 1, r);
}
}
void print(int A[], int s)
{
for (int i = 1; i <= s; i++)
{
cout << A[i] << endl;
}
}
int main()
{
int A[SUM + 1];
memset(A, 0, SUM + 1);
srand(time(NULL));
for (int i = 0; i <= SUM; i++)
{
A[i] = rand() % 100;
}
cout << "rand numbers: " << endl;
print(A, SUM);
quicksort(A, 1, SUM);
cout << "quicksort numbers: " << endl;
print(A, SUM);
return 0;
}
运行结果如下: