合并排序(递归法)5

    技术2022-05-19  23

    /*arry[100]mergesort(s,e){s1=s;s2=(s+e)/2+1;e1=s2-1;e2=e;if(s<e){mergesort(s1,e2);mergesort(s2,e2);merge(s1,s2,e21,e2);}else return ;递归错误,把函数入口数据输出*/#include<stdio.h>int arry[100],n;int temp[55];void merge(int s1,int s2,int e1,int e2){ int i=s1,j=s2,k=0; while(i<=e1&&j<=e2){  if(arry[i]<=arry[j]){   temp[k++]=arry[i];   i++;  }  else {   temp[k++]=arry[j];   j++;  } } if(i>=e1+1&&j<=e2){  while(j<=e2)   temp[k++]=arry[j++]; } else if(j>=e2+1&&i<=e1){  while(i<=e2)   temp[k++]=arry[i++]; } i=0; j=s1; while(i<k-1){  arry[j++]=temp[i++]; }

    }void mergesort(int s,int e){  int s1,s2,e1,e2;    if(s<e){  s1=s;  e1=(s+e)/2;  s2=e1+1;  e2=e;       mergesort(s1,e1);//putchar('s');       mergesort(s2,e2);       merge(s1,s2,e1,e2);        //putchar('v'); }    //else {putchar('T');return ;}}main(){ int i; scanf("%d",&n); for(i=0;i<n;i++)  scanf("%d",&arry[i]); mergesort(0,n-1); for(i=0;i<n;i++)  printf("%d ",arry[i]); return 0;} 

     


    最新回复(0)