算法导论快速排序实现

来源:互联网 发布:淘宝店铺公告怎么写 编辑:程序博客网 时间:2024/05/17 22:07

算法导论快速排序实现

快速排序通常是实际排序应用中最好的选择

#include <stdio.h>#include <stdlib.h>int partion(int a[],int p,int r){    int x=a[r-1];    int i=p-1;    int j=0,temp=0;    for(j=p;j<r-1;++j)    {        if(a[j]<=x)        {            i++;            temp=a[i];            a[i]=a[j];            a[j]=temp;        }    }    temp=a[i+1];    a[i+1]=a[r-1];    a[r-1]=temp;    return i+1;}void quicksort(int a[],int p,int r){    int q=0;    if(p<r)    {        q=partion(a,p,r);        quicksort(a,p,q-1);        quicksort(a,q+1,r);    }}int main(){    int a[]={1,4,1,5,9,34,45,2,6,0};    quicksort(a,0,sizeof(a)/sizeof(int));    int i=0;    for(i=0;i<sizeof(a)/sizeof(int);++i)        printf("%d ",a[i]);    return 0;}
快速排序的随机化版本在输入元素互异的情况,快速排序的期望运行时间为 0(nlgn)#include <stdio.h>#include <stdlib.h>#include <time.h>int partion(int a[],int p,int r){    int x=a[r-1];    int i=p-1;    int j=0,temp=0;    for(j=p;j<r-1;++j)    {        if(a[j]<=x)        {            i++;            temp=a[i];            a[i]=a[j];            a[j]=temp;        }    }    temp=a[i+1];    a[i+1]=a[r-1];    a[r-1]=temp;    return i+1;}int randompartion(int a[],int p,int r){    srand((unsigned)time(0));    int i=rand()%(r-p)+p;    if(i!=p)    {        int temp=a[i];        a[i]=a[r-1];        a[r-1]=temp;    }    return partion(a,p,r);}void quicksort(int a[],int p,int r){    int q=0;    if(p<r)    {        q=randompartion(a,p,r);        quicksort(a,p,q);        quicksort(a,q+1,r);    }}int main(){    int a[]={1,4,1,5,9,34,45,2,6,0};    quicksort(a,0,sizeof(a)/sizeof(int));    int i=0;    for(i=0;i<sizeof(a)/sizeof(int);++i)        printf("%d ",a[i]);    return 0;}