数据结构(排序三)

归并排序

  利用归并的思想实现的排序方法

二路归并排序原理

  • 假设初始序列有n个记录,则可以看成n个有序的子序列,每个子序列的长度为1
  • 然后两两归并,得到n/2个长度为2或1的有序子序列;再次两两归并,...
  • 如此重复,直到得到一个长度为n的有序序列为止
 1 #include <stdio.h>
 2 #define MAXSIZE 15
 3 
 4 void sort(int *s1,int n,int *s2,int m){
 5     int i,j,k=0;
 6     int temp[MAXSIZE];
 7     for(i=0,j=0;i<n && j<m;){
 8         if(s1[i]<s2[j])
 9             temp[k++]=s1[i++];
10         else
11             temp[k++]=s2[j++];
12     }
13     while(i<n)
14         temp[k++]=s1[i++];
15     while(j<m)
16         temp[k++]=s2[j++];
17     for(i=0;i<k;i++){
18         s1[i]=temp[i];
19     }
20 }
21 
22 void MergeSort(int a[],int n){
23     int *s1,*s2,m;
24     if(n>1){
25         s1=a;
26         m=n/2;
27         s2=s1+m;
28         MergeSort(s1,m);
29         MergeSort(s2,n-m);
30         sort(s1,m,s2,n-m);
31     }
32 }
33 
34 void main(){
35     int a[]={9,8,7,6,5,4,3,2,1,0},i;
36     MergeSort(a,10);
37     for(i=0;i<10;i++){
38         printf("%d  ",a[i]);
39     }
40 }

猜你喜欢

转载自www.cnblogs.com/TianLiang-2000/p/12894011.html
今日推荐