#include<iostream.h> void Merge(int *a,int p,int q,int r)//合并一个数组中前后两个有序序列 { //p,q,r是数组下标,a[p---q],a[q+1---r]两个有序 int *pA=a+p; int *pB=a+q+1; while(pA!=pB&&pB<=a+r) { if(*pA<=*pB) pA++; else { int temp=*pB; for(int *pTemp=pB;pTemp>pA;pTemp--)//pA至pB-1后移一位 *pTemp=*(pTemp-1); *pA=temp;// pA++; pB++; } } } void MergeSort(int *a,int m,int n) { int q=(m+n)/2; if(m<n) { MergeSort(a,m,q); MergeSort(a,q+1,n); Merge(a,m,q,n); } } void main() { int a[]={5,4,7,0,1,6,3,9,3,6,7,34,56,37,26}; MergeSort(a,0,14); for(int i=0;i<15;i++) cout<<a[i]<<" "; }