快速排序算法Quicksort(C++实现)
快速排序由 C. A. R. Hoare(东尼·霍尔,Charles Antony Richard Hoare)在 1960 年提出, 之后又有许多人做了进一步的优化。
其平均时间复杂度约为O (NlogN) ,一般情况下效率高于冒泡排序O (N2) 。
代码如下:
#include <iostream>
using namespace std;
void quickSort(int* a,int left,int right)
{
int l,r,t,base;
if(left>=right)
return;
base=a[left]; //将左边第一个数做为基准数存入
l=left;
r=right;
while(l!=r)
{
//先从右往左找,注意顺序
while(a[r]>=base && l<r)
r--;
//找到第一个小于基准数的数
//再从左往右找
while(a[l]<=base && l<r)
l++;
//找到第一个大于基准数的数
//交换两个数在数组中的位置
t=a[l];
a[l]=a[r];
a[r]=t;
}
//将基准数与中间换位置
a[left]=a[l];
a[l]=base;
quickSort(a,left,l-1);//继续处理基准数左边的
quickSort(a,l+1,right);//继续处理基准数右边的
}
int main() {
int i,n;
cin>>n;//输入要排序的数字个数
int *a=new int[n];
for(i=0;i<n;i++)
cin>>a[i];
quickSort(a,0,n-1); //调用快速排序函数
//输出排序后的结果
for(i=0;i<n;i++)
cout<<a[i]<<" ";
return 0;
}
如有错误之处,欢迎指出。