归并排序
void merge(int A[],int Pos_low,int Pos_mid,int Pos_high){
int* B=new int[Pos_high-Pos_low+1];
int i=Pos_low,j=Pos_mid+1,k=0;
while(i<=Pos_mid and j<=Pos_high){
if(A[i]<=A[j]){
B[k]=A[i];
i++;
}
else{
B[k]=A[j];
j++;
}
k++;
}
while (i<=Pos_mid){
B[k]=A[i];
k++;
i++;
}
while (j<=Pos_high){
B[k]=A[j];
k++;
j++;
}
for (int i = Pos_low,k=0; i <= Pos_high; i++) { //注意等于号!!!!!!!!!!!
A[i]=B[k];
k++;
}
delete[]B;
}
void MergeSort(int A[],int low,int high){
if(low<high){
int mid = low + (high - low)/2; // 取得序列中间的元素
MergeSort(A,low,mid);
MergeSort(A,mid+1,high);
merge(A,low,mid,high);
}
}