归并排序算法
来源:互联网 发布: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;}