归并排序,运用了二分和递归求解的思想,将需要排序的序列每一次递归中从中间切开,分左半和右半,然后将左半右半合并,那么这里就产生了两个函数,一个是MergeSort的切分函数,一个是合并的Merge函数
void MergeSort(int data[], int left, int right){
if(left<right){
int mid = (left+right)/2;
MergeSort(data, left, mid); //递归地将左半部分归并排序
MergeSort(data, mid+1, right); //递归地将右半部分归并排序
Merge(data, left, mid, mid+1, right); //将左半右半合并
}
}
void Merge(int a[], int L1, int R1, int L2, int R2){
int i = L1, j = L2; //定义i, j变量分别遍历左半,右半部分
int temp[Max], index = 0; //定义临时存放排序好的数组
while(i<=R1 && j<=R2){
if(a[i] <= a[j]){
temp[index++] = a[i++];
}else{
temp[index++]=a[j++];
}
while(i<=R1){
temp[index++] = a[i++];
}
while(j<=R2){
temp[index++] = a[j++];
}
for(i = 0; i<index; i++){ //将临时数组temp的元素存放回data数组中
a[L1+i] = temp[i];
}
}