快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
快速排序平均时间复杂度为O(nlog2n),最坏时间复杂度为O(n2),最好时间复杂度为O(nlog2n),空间复杂度为O(nlog2n),快速排序是不稳定排序。
#include <iostream>
using namespace std;
void swapF(int vec[], int i, int j)
{
int tem = vec[i];
vec[i] = vec[j];
vec[j] = tem;
}
void QSort(int vec[], int start,int end)
{
if (start >= end)
return;
int i = start, j = end;
int key = vec[i];
while (i<j)
{
while (i < j && vec[j] >= key)
{
j--;
}
swapF(vec, i, j);
while (i < j && vec[i] <= key)
{
i++;
}
swapF(vec, i, j);
}
QSort(vec, start, i-1);
QSort(vec, i+1, end);
}
int main()
{
int *vec = new int[10];
int i;
for (i = 0; i <= 9; ++i)
{
vec[i] = rand() % 10;
}
cout << "待排序数据:" << endl;
for (i = 0; i <= 9; ++i)
{
cout << vec[i] << " ";
}
cout << endl;
cout << endl;
QSort(vec, 0, 9);
cout << "排序后数据:" << endl;
for (i = 0; i <= 9; ++i)
{
cout << vec[i] << " ";
}
delete[] vec;
return 0;
}