并归排序(递归)

 1 #include <iostream>
 2 using namespace std;
 3 const int maxn = 100;
 4  
 5 int merge(int A[],int L1,int R1,int L2,int R2){//L1、R1为第一段区间的左下标与右下标,同理L2、R2 为第二段…… 
 6     
 7     int temp[maxn]={0},index=0;
 8     int i=L1,j=L2;
 9     
10     while(i<=R1 && j<=R2){//两段数据做对比,将较小的放入temp数组中 
11         if(A[i]<=A[j]){
12             temp[index++]=A[i++];
13         }else{
14             temp[index++]=A[j++];
15         }
16     }
17     while(i<=R1){//将第一段中剩余的元素 放入temp数组中 
18         temp[index++]=A[i++];
19     }
20     while(j<=R2){//将第二段中剩余的元素 放入temp数组中 
21         temp[index++]=A[j++];
22     }
23     
24     for(int i=0;i<index;i++){//将temp数组中的 元素放进 A数组中 
25         A[L1+i]=temp[i];
26     }
27 }
28 
29 //递归实现 
30 void mergesort(int A[],int left,int right){
31     
32     
33     if(left<right){
34         
35         int mid = (left+right)/2;
36         mergesort(A,left,mid);
37         mergesort(A,mid+1,right);
38         merge(A,left,mid,mid+1,right);
39         
40     }
41     
42 } 
43 
44 int main(){
45     int num[7]={5,4,7,1,2,3,9};
46     mergesort(num,0,6);
47     for(int i=0;i<7;i++){
48         cout<<num[i]<<'\n';
49     }
50     return 0;
51 }

 

posted @ 2020-02-23 14:50  xuecl  阅读(236)  评论(0编辑  收藏  举报