zoukankan      html  css  js  c++  java
  • 排序算法-归并排序

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

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

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

    //自底向上的归并排序
    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++;
            }
            
    }
  • 相关阅读:
    GARP和GVRP
    VLAN间路由
    Voice VLAN
    VLAN
    SSH
    Telnet
    FTP
    DHCP
    STP
    交换机
  • 原文地址:https://www.cnblogs.com/Erick-L/p/12591392.html
Copyright © 2011-2022 走看看