# （递归版）合并排序

## 主要代码：

```void MergeSort(int *arr,int length){
Msort(arr,arr,0,length-1);
}
void Msort(int *arr1,int *arr2,int begin,int end){
int arr3[10];
int m;
if(begin == end)
arr2[begin] = arr1[end];
else{
m = (end + begin)/2;
Msort(arr1,arr3,begin,m);
Msort(arr1,arr3,m+1,end);
sort(arr3,arr2,begin,m,end);
}
}
void sort(int *arr3,int *arr1,int begin,int m,int end){
int i=begin,j=m+1,k,h;
for(k=i; i<=m && j<=end;k++){
if(arr3[i] < arr3[j])
arr1[k] = arr3[i++];
else
arr1[k] = arr3[j++];
}
if(i <= m){
for(h=0; h<=m-i;h++)
arr1[k+h] = arr3[i+h];
}else{
for(h=0; h<=end-j;h++)
arr1[k+h] = arr3[j+h];
}
}```

## 全部代码：

```#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int arrtest1[10] = {3,4,7,8,0,9,1,2,6,5};
int arrtest2[10] = {0,1,2,3,4,5,6,7,8,9};
int arrtest3[10] = {9,8,7,6,5,4,3,2,1,0};
void copy(int *from,int *arr,int length);
void print(int *arr,int length);
void MergeSort(int *arr,int length);
void Msort(int *arr1,int *arr2,int begin,int end);
void sort(int *arr3,int *arr1,int begin,int m,int end);
int main(){
clock_t start,end;
int Arr[10];
int i;
copy(arrtest1,Arr,10);
print(Arr,10);
MergeSort(Arr,10);
print(Arr,10);
start = clock();
for(i=0;i<100000;i++){
copy(arrtest1,Arr,10);
//print(Arr,10);
MergeSort(Arr,10);
//print(Arr,10);
}
end = clock();
printf("first test:%d\n",end-start);

start = clock();
for(i=0;i<100000;i++){
copy(arrtest2,Arr,10);
//print(Arr,10);
MergeSort(Arr,10);
//print(Arr,10);
}
end = clock();
printf("first test:%d\n",end-start);

start = clock();
for(i=0;i<100000;i++){
copy(arrtest3,Arr,10);
//print(Arr,10);
MergeSort(Arr,10);
//print(Arr,10);
}
end = clock();
printf("first test:%d\n",end-start);

getchar();
return 0;
}
void MergeSort(int *arr,int length){
Msort(arr,arr,0,length-1);
}
void Msort(int *arr1,int *arr2,int begin,int end){
int arr3[10];
int m;
if(begin == end)
arr2[begin] = arr1[end];
else{
m = (end + begin)/2;
Msort(arr1,arr3,begin,m);
Msort(arr1,arr3,m+1,end);
sort(arr3,arr2,begin,m,end);
}
}
void sort(int *arr3,int *arr1,int begin,int m,int end){
int i=begin,j=m+1,k,h;
for(k=i; i<=m && j<=end;k++){
if(arr3[i] < arr3[j])
arr1[k] = arr3[i++];
else
arr1[k] = arr3[j++];
}
if(i <= m){
for(h=0; h<=m-i;h++)
arr1[k+h] = arr3[i+h];
}else{
for(h=0; h<=end-j;h++)
arr1[k+h] = arr3[j+h];
}
}
void copy(int *from,int *arr,int length){
int i;
for(i=0;i<length;i++){
arr[i] = from[i];
}
}

void print(int *arr,int length){
int i;
for(i=0;i<length;i++){
printf("%d ",arr[i]);
}
printf("\n");
}```

796 篇文章74 人订阅

0 条评论

## 相关文章

1323

2689

692

### event事件对象

event: 事件对象，当一个事件发生的时候，和当前这个对象发生的这个事件有关的一些详细信息都会被临时保存到一个指定的地方-event对象，供我们在需要的时候调...

902

1969

2122

### css继承样式怎么控制?用选择器

css样式继承性是指下级的样式属性会继承上级的属性，通俗点讲是儿子来继承父亲的属性，比如li会继承ul的属性。css继承原理是我们设置上级(父级)的CSS样...

4165

833

3227

1835