归并排序与快速排序

来源:互联网 发布:python高级编程 编辑:程序博客网 时间:2024/06/05 22:53

归并

#include<cstdio>#include<cstring>void merge_sort(int a[],int p,int q);void merge (int a[],int p,int r,int q);int main(){    int n;    scanf("%d",&n);    int a[n];    for (int i=0;i<n;i++)        scanf("%d",&a[i]);    merge_sort(a,0,n-1);    for (int i=0;i<n;i++)        printf("%d ",a[i]);    return 0;}void merge_sort(int a[],int p,int q){    if (p<q)    {        int k=p+(q-p)/2;        merge_sort(a,p,k);        merge_sort(a,k+1,q);        merge(a,p,k,q);    }}void merge (int a[],int p,int r,int q){    int i,j,k,n=r-p+1,m=q-r;    int b[n],c[m];    memcpy(b,a+p,4*n),memcpy(c,a+r+1,4*m);    for (i=j=k=0;i<n+m;i++)    {        if (j==n) {a[p+i]=c[k++]; continue;}        if (k==m) {a[p+i]=b[j++]; continue;}        a[p+i]=b[j]<c[k] ?b[j++]:c[k++];    }}

快排

#include<cstdio>#include<string>void quick_sort(int a[],int  p,int q);int  partition(int a[],int p,int q);int main (){    int n;    scanf("%d",&n);    int a[n];    for (int i=0;i<n;i++)        scanf("%d",&a[i]);    quick_sort(a,0,n-1);    for (int i=0;i<n;i++)        printf("%d ",a[i]);    return 0;}void quick_sort(int a[],int  p,int q){    if (p<q)    {        int i=partition(a,p,q);        quick_sort(a,p,i-1);        quick_sort(a,i+1,q);    }}int  partition(int a[],int p,int q){    int t,i=p,j=q+1;    while(1)    {        while(a[p]<a[--j]) if (j==0) break;        while(a[p]>a[++i]) if (i==0) break;        if (i>=j) break;        t=a[j],a[j]=a[i],a[i]=t;    }     t=a[j],a[j]=a[p],a[p]=t;     return j;}
原创粉丝点击