归并排序
归并排序和快速排序一样,也是一种通过分治思想来提升排序速度的高效排序算法。归并排序采用这样一种策略,将待排序的序列分为两部分,这两个部分分别进行排序。排序完成时,这两部分都是有序的,然后再依次比较这两个序列中元素的大小,将这些元素插入到新的序列当中,这个新的序列就是最终排序结果。
两个有序序列合并为一个序列的过程
归并排序代码如下:
1 int*Merge(int a1[],int a2[],int n,int m) // 归并排序的合并函数 2 { 3 int num = n + m; 4 int*b = new int[num]; 5 int index1,index2,index3; 6 for(index1=index2=index3=0;index1<n&&index2<m;index3++) 7 { 8 if(a1[index1]<a2[index2])b[index3] = a1[index1++]; 9 else b[index3] = a2[index2++]; 10 } 11 while(index1<n) b[index3++] = a1[index1++]; 12 while(index2<m) b[index3++] = a2[index2++]; 13 return b; 14 } 15 int*MergeSort(int a[],int left,int right) 16 { 17 if(left==right) 18 { 19 int*b = new int; 20 *b = a[left]; 21 return b; 22 } 23 int m = (right-left+1); 24 int n = (right-left+1)/2; 25 int*a1 = MergeSort(a,left,left+n-1); 26 int*a2 = MergeSort(a,left+n,right); 27 int*b = Merge(a1,a2,n,m-n); 28 return b; 29 }
归并排序的优点
归并排序的时间复杂度很稳定,最好,最坏,平均时间复杂度都为O(nlogn)。