归并排序算法

来源:互联网 发布:mac通过u盘安装系统 编辑:程序博客网 时间:2024/05/22 04:32
关键是归并函数的递归调用
归并排序算法
#include<stdio.h>void Merge(int *a,int *b,int i,int m,int n){     int j,k;     for(j=m+1,k=i;i<=m&&j<=n;k++){     if(a[i]<=a[j])b[k]=a[i++];     else b[k]=a[j++];}     while(i<=m)b[k++]=a[i++];     while(j<=n)b[k++]=a[j++];} void GuiBing(int *a,int *b,int s,int t){     int m;     int c[100];//中间数组很重要      if(s==t)b[s]=a[s];     else{         m=(s+t)/2;         GuiBing(a,c,s,m);// 递归地将a[s...m]归并为有序的c[s..m]         GuiBing(a,c,m+1,t);//递归地a[m+1..t]归并为有序的c[m+1..t]         Merge(c,b,s,m,t);// 将c[s..m]和c[m+1..t]归并到b[s..t]         }}//  int main(){    int a[100],b[100];    int n,i;    scanf("%d",&n);    for(i=1;i<=n;i++)    scanf("%d",&a[i]);    GuiBing(a,b,1,n);    for(i=1;i<=n;i++)    printf("%d ",b[i]);    system("pause");    return 0;}

原创粉丝点击