归并排序
归并排序。以后留着复习数据结构用,看了很多个版本,这个版本写的比较好,我改编了一下。
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 #define N 1000000 5 int que[N],p[N];; 6 void Mergesort(int l,int r) 7 { 8 int mid,i,j,t; 9 if(l < r) 10 { 11 mid = (l+r)/2; 12 Mergesort(l,mid); 13 Mergesort(mid+1,r); 14 t = l; 15 for(i = l,j = mid+1;j <= r&&i <= mid;) 16 { 17 if(p[i] > p[j]) 18 { 19 que[t++] = p[j++]; 20 } 21 else 22 { 23 que[t++] = p[i++]; 24 } 25 } 26 if(j <= r) 27 { 28 for(;j <= r;j ++) 29 que[t++] = p[j]; 30 } 31 else 32 { 33 for(;i <= mid;i ++) 34 que[t++] = p[i]; 35 } 36 for(i = l;i <= r;i ++) 37 p[i] = que[i]; 38 } 39 } 40 int main() 41 { 42 int i,n; 43 while(scanf("%d",&n)!=EOF) 44 { 45 for(i = 1;i <= n;i ++) 46 { 47 scanf("%d",&p[i]); 48 } 49 Mergesort(1,n); 50 for(i = 1;i <= n;i ++) 51 { 52 if(i == 1) 53 printf("%d",p[i]); 54 else 55 printf(" %d",p[i]); 56 } 57 printf("\n"); 58 } 59 return 0; 60 }