二路归并排序
来源:互联网 发布:淘宝相似问题怎么看 编辑:程序博客网 时间:2024/05/22 11:05
#include <stdio.h>void MergeArray(int a[],int s,int m,int t){ int i = s; int j = m+1; int tmp[t+1]; int k=0; while(i<=m && j<=t) { if(a[i] <= a[j]) { tmp[k++] = a[i++]; } else { tmp[k++] = a[j++]; } } while(i<=m) { tmp[k++] = a[i++]; } while(j<=t) { tmp[k++] = a[j++]; } for(i=0;i<k;i++) { a[s+i] = tmp[i]; }}void MergeSort(int a[],int s,int t){ if(s<t) { int m = (s+t)/2; MergeSort(a,s,m); MergeSort(a,m+1,t); MergeArray(a,s,m,t); }}void main(){ int a[] = {1,9,8,2,0,9,1,5,6}; MergeSort(a,0,8); int i; for(i=0;i<=8;i++) { printf("%d->",a[i]); }}