合并排序
合并排序
1. 算法思想
对于输入的数组a[i , j],将其分为大致相同的2个子集,利用递归一直分下去,然后分别对2个子集进行排序(在合并中体现),最终完成排序。
2. 算法实现
template<class T> void Copy(T a[], T b[], int left, int right) { for(int i = left; i <= right; i++){ a[i] = b[i]; } } template<class T> void Merge(T a[], T b[], int left, int middle, int right) { int r = middle + 1, k = left; while( (left <= middle) && (r <= right) ){ if(a[left] <= a[r]) b[k++] = a[left++]; else b[k++] = a[r++]; } while(left <= middle) b[k++] = a[left++]; while(r <= right) b[k++] = a[r++]; } template<class T> void MergeSort(T a[], T b[], int left, int right) { if(left < right){ int temp = ( (left + right) / 2); MergeSort(a,b,left, temp); MergeSort(a,b,temp + 1,right); Merge(a,b,left,temp,right); Copy(a,b,left,right); } }
3. 算法分析
在Merge排序中,其时间复杂度与输入数组是否有序无关,最坏时间复杂度和平均时间复杂度均为Ο(nlog(n)),其空间复杂度为Ο(n),体现在辅助数组。
If you want to build your world,just do it.
posted on 2016-10-07 21:07 JackTheRipper 阅读(217) 评论(0) 收藏 举报
浙公网安备 33010602011771号