分治排序

来源:互联网 发布:网络感叹号是什么原因 编辑:程序博客网 时间:2024/06/07 18:00
#include<stdio.h>#include<limits.h>#include <stdlib.h>void sort(int *a,int p,int q,int r){int end1,end2;end1=q-p+1;//这是数字的个数,避免q-p=0,所以+1保证 数组范围最小取1;end2=r-q;//r-(q+1)+1;int *L,*R;L=(int *)malloc((end1+2) * sizeof(int));//动态开辟内存 由0->end1 加上最后的哨兵元素R=(int *)malloc((end2+2) * sizeof(int));for(int i=1;i<=end1;i++)L[i]=a[p+i-1];for(int j=1;j<=end2;j++)R[j]=a[q+j];L[end1+1]=INT_MAX;//无穷大R[end2+1]=INT_MAX;i=1,j=1;for(int k=p;k<=r;k++){if(L[i]<=R[j]){a[k]=L[i];i++;}else{a[k]=R[j];j++;}}free(L);free(R);}void digui(int *a,int p,int r){int q;if(p<r){q=(p+r)/2;digui(a,p,q);digui(a,q+1,r);sort(a,p,q,r);}} int main(){int a[11];for(int i=1;i<=10;i++)scanf("%d",&a[i]);int *ptr=a;digui(ptr,1,10);for(i=1;i<=10;i++)printf("%d\n",a[i]);return 0;}

0 0
原创粉丝点击