快速排序算法(C)

来源:互联网 发布:手机oa软件 编辑:程序博客网 时间:2024/06/10 04:40
       sort快排函数的基本版,效率n*logn,快排的完全版就是在递归之中夹杂对序列的预判断,最优的选择排序方法,快速排序算法只是其中之一。

       简单的说明一下快速排序的思想,对于一个数列,首先选择一个基数(x),进行第一次排序,把比x 小的放在x左边,大的放右边(默认从小到大)。

       例如 : 8 4 5 7 6 9 2 1 3 0,  选择基数8  那么第一次排序的结果是这样的: 0 4 5 7 6 3 2 1 8 9

       之后捏,分治一下,以基数为界,左边排一遍,右边排一遍,再用得到的基数为界再排,排到没数为止。

      

#include<cstdio>#include<cstring>#include<iostream>using namespace std;int integer[100000];int qsort(int s,int e){    int i=s,j=e;    int x=integer[i]; //  基准数    int temp;    while(i!=j)    {        while(integer[j]<=x && i<j)        {            j--;        }        while(integer[i]>=x && i<j)        {            i++;        }        if(i<j)        {            temp = integer[i];            integer[i]=integer[j];            integer[j]=temp;        }    }    temp=integer[i];    integer[i]=x;    integer[s]=temp;    return i;}void qsort_f(int s,int e){    if(s>e) return;    int pos=qsort(s,e);    qsort_f(s,pos-1);    qsort_f(pos+1,e);}int main(){    int n;    cin>>n;    while(n--)    {        int t;        cin>>t;        for(int i=0;i<t;i++)        {            cin>>integer[i];        }        qsort_f(0,t-1);        for(int j=0;j<t;j++)        {            cout<<integer[j]<<" ";        }        cout<<endl;    }    return 0;}/*108 4 5 7 6 9 2 1 3 0*/

 

      

  

0 0