码迷,mamicode.com
首页 > 编程语言 > 详细

基础算法 分治法之合并排序

时间:2016-12-13 07:02:26      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:rand   基础   blog   stdio.h   算法   排序算法   std   大小   code   

思想: 合并排序算法的分治策略是将待排序元素分成大小大致相同的两个子集合,分别对两个子集合进行排序,最终将排好序的子集合合并成所要求的排好序的集合。

 

 1 #include <stdio.h>  
 2    
 3 void merge(int a[],int p,int q,int r)  
 4 {  
 5     int n1=q-p+1,n2=r-q;  
 6     int b1[n1];  
 7     int b2[n2];  
 8     int i=0,j=0,temp1=p,temp2=q;  
 9     while(p<=q)  
10     {  
11         b1[i]=a[p];  
12         ++i;  
13         ++p;  
14     }  
15     while(q+1<=r)  
16     {  
17         b2[j]=a[q+1];  
18         ++j;  
19         ++q;  
20     }  
21    
22     p=temp1;q=temp2;  
23     i=0,j=0;  
24     while(p<=r)  
25     {  
26         if(i==n1)           
27         {  
28             a[p]=b2[j];  
29             ++j;  
30         }  
31         else if(j==n2)  
32         {  
33             a[p]=b1[i];  
34             ++i;  
35         }  
36        
37         else if(b1[i]<b2[j])  
38         {  
39             a[p]=b1[i];  
40             ++i;  
41         }  
42         else  
43         {  
44             a[p]=b2[j];  
45             ++j;  
46         }  
47         ++p;  
48     }  
49 }  
50    
51 void merge_sort(int a[],int p,int r)  
52 {  
53     int q=0;  
54     if(p<r)  
55     {  
56         q=(p+r)/2;  
57         merge_sort(a,p,q);   
58         merge_sort(a,q+1,r);  
59         merge(a,p,q,r);  
60     }  
61 }  
62    
63 int main()  
64 {  
65     int i, a[100];  
66     srand(time(0));  
67     for ( i = 1; i < 101; ++i ){  
68         a[i-1] = rand() % 1001;  
69         printf( "%3d ", a[i-1] );  
70         if(i%15==0) printf("\n");   
71     }  
72     printf("\n\n");  
73     SelectionSort(a, 100);  
74     for ( i = 1; i < 101; ++i ){  
75         printf( "%3d ", a[i-1] );  
76         if(i%15==0) printf("\n");   
77     }  
78     getch();  
79     return 0;  
80 }  

 

基础算法 分治法之合并排序

标签:rand   基础   blog   stdio.h   算法   排序算法   std   大小   code   

原文地址:http://www.cnblogs.com/lt132024/p/6166203.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!