Hello World

快速排序算法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;

}

如有错误之处,欢迎指出。

posted on 2015-04-19 21:10  Lllzzy  阅读(288)  评论(0编辑  收藏  举报

导航