//归并排序—二路归并排序
int *B = (int *)malloc(n*sizeof(int));//辅助数组B,n要A数组需要归并的数量(high-low)
void MergeSort(int A[],int low,int high){
if(low<high){
int mid =(low + high)/2; //从中间划分
MergeSort(A[],low,mid); //对左半部分归并排序--递归到左半部分是有序的
MergeSort(A[],mid+1,high); //对右半部分归并排序--递归到右半部分是有序的
Merge(A[],low,mid,high); //归并
}//if
}
void Merge(int A[],int low,int mid,int high){ //归并算法,将两个有序表组合成一个新的有序表
int i,j,k;
for(k=low;k<=high;K++) //将A数组复制到B数组
B[k]= A[k];
for(i=low,j=mid+1,k=i;i<=mid&&j<=high;k++){ //比较B的左右两半部分中的元素
if(B[i]<B[j]) //若B[i]小,将B[i]复制到A[k]
A[k]=B[i++];
else //若B[j]小,将B[i]复制到A[k]
A[k]=B[j++];
}
while(i<=mid) //若左半部分未检测完,剩余部分复制到A
A[k++]=B[i++];
while(j<=high) //若右半部分未检测完,剩余部分复制到A
A[k++]=B[j++];
}
09-10
1660
02-27
9154