码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法-归并排序

时间:2020-03-29 13:07:53      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:span   int   type   temp   ++   i++   排序   索引   nbsp   

算法思想:首先把一个数组中的元素,按照某一方法,先拆分了之后,按照一定的顺序各自排列,然后再归并到一起,使得归并后依然是有一定顺序的 。

算法可自顶向下拆分数组也可以自底向上拆分数组合并

自底向上的归并排序有对索引依赖少的优势,对于链表来说比较适合

//自底向上的归并排序
template<typename T>
void mergeSortBU(T arr[],int n){
    for(int sz = 1;sz <=n;sz += sz)
        for(int i=0;i+sz<n;i+=sz + sz)
            //对arr[i..i+sz-1]和arr[i+sz..i+2*sz-1]进行归并
            __mearge(arr,i,i+sz-1,min(i+sz+sz-1,n-1));
}

 

//归并排序子函数,将arr[l...mid]和arr[mid+1...r]两部分进行归并
template<typename T>
void __mearge(T arr[],int l,int mid,int r){
    T aux[r-l+1];
    for(int i=l;i<=r;i++)
        aux[i-l] = arr[i];
    int i =l,j=mid+1;
    for (int k=l;k<=r;k++)
        if(i >mid){
            arr[k] = aux[j-l];
            j++;
        }else if(j>r)
        {
            arr[k] = aux[i-l];
            i++;
        }
        
        if(aux[i-l] <aux[j-l]){
            arr[k] = aux[i-l];
            i++;
        }else
        {
            arr[k] = aux[j-l];
            j++;
        }
        
}

 

排序算法-归并排序

标签:span   int   type   temp   ++   i++   排序   索引   nbsp   

原文地址:https://www.cnblogs.com/Erick-L/p/12591392.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!