归并排序
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 }
注:本文参考与morewindows 的白话经典算法,感谢morewindows
觉得这个方法简单明了
浙公网安备 33010602011771号