时光飞逝~

归并排序
 1 #include "stdafx.h"
 2 #include <memory.h>
 3 //归并排序
 4 
 5 //两个有序序列合并为一个新的有序序列
 6 template <typename T>
 7 void Merge(T *a,int first,int mid, int last, T *p)
 8 {
 9 
10     int i=first;
11     int j = mid+1;
12     int m=mid;
13     int n=last;
14     int k=0;
15     while(i<=m&&j<=n)
16     {
17         if(a[i]>a[j]) p[k++] = a[j++];
18         else p[k++] = a[i++];
19     }
20     while(i<=m)
21     {
22         p[k++] = a[i++];
23     }
24     while(j<=n)
25     {
26         p[k++] = a[j++];
27     }
28     for(int l=0;l<k;l++)
29     {
30         a[first+l]=p[l];
31     }
32 }
33 
34 //任一序列的的归并排序
35 template <typename T>
36 void MergeSort(T *a, int first, int last, int *temp)
37 {
38     int mid = (first+last)/2;
39     if(first<last)
40     {
41         MergeSort(a,first,mid,temp);
42         MergeSort(a,mid+1,last,temp);
43         Merge(a,first,mid,last,temp);
44     }
45 }
46 template <typename T>
47 void Print(T *a, int len)
48 {
49     for(int i=0;i<len;i++)
50     {
51         printf("%d ",*a++);
52     }
53     printf("\n");
54 }
55 int main(int argc, char* argv[])
56 {
57     int a1[10] = {6,7,8,9,10,1,2,3,4,5};
58     int a4[5] = {9,8,7,6,10};
59     int a3[10] = {0};
60     Merge(a1,0,4,9,a3);
61     Print(a1,10);
62     memset(a3,0,sizeof(a3));
63     MergeSort(a4,0,4,a3);
64     Print(a3,10);
65     return 0;
66 }
View Code


注:本文参考与morewindows 的白话经典算法,感谢morewindows

觉得这个方法简单明了

posted on 2013-07-20 01:23  时光飞逝~  阅读(168)  评论(0)    收藏  举报