标签:归并排序
#include <stdio.h> #include <stdlib.h> void Merge(int a[],int p,int q,int r){ int i,j,k,n1,n2; int * front,* back; n1=q-p+1; //前一部分长度 n2=r-q; //后一部分长度 front = (int *)malloc(n1*sizeof(int)); //申请两个空间来存放拍好的数组 back = (int *)malloc(n2*sizeof(int)); for(i = 0;i<n1;i++){ front[i] = a[p+i]; } for(i = 0;i<n2;i++){ back[i] = a[q+i+1]; } //将元素合并 i=0; j=0; k=p; while(i<n1&&j<n2){ if(front[i]<back[j]){ a[k++] = front[i++]; } else{ a[k++] = back[j++]; } } //将剩余元素合并 while(i<n1){ a[k++] = front[i++]; } while(j<n2){ a[k++] = back[j++]; } } void MergeSort(int a[],int p,int r){ int q; if(p<r){ q=(p+r)/2; //将数组分解 MergeSort(a,p,q); //将前面一部分用递归的方法排序 MergeSort(a,q+1,r); //将后面一部分用递归的方法排序 Merge(a,p,q,r); //将两个部分合并 } } int main(){ int *a,n,i; printf("请输入数组长度 n ="); scanf("%d",&n); a= (int *)malloc(n*sizeof(int)); printf("输入数组:"); for( i=0;i<n;i++){ scanf("%d",&a[i]); } MergeSort(a,0,7); //合并结果 for( i=0;i<8;i++){ printf("%5d",a[i]); } printf("\n"); return 0; }标签:归并排序
原文地址:http://blog.51cto.com/13645380/2108293