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

    归并排序就是将两个或两个以上的有序表合并成一个有序表的过程
    将两个有序表合并成一个有序表的过程称为2-路归并

    算法过程如图所示:

    2

    相邻两个有序子序列的归并

    void Merge(RedType R[], RedType &T[], int low, int mid, int high){
      int i = low;
      int j = mid + 1;
      int k = low;
      while(i<=mid && j<=high) {
        if(R[i]<R[j]) T[k++] = R[i++];
        else T[k++] = R[j++];
      }
      while(i<=mid) T[k++] = R[i++];
      while(j<=high) T[k++] = R[j++];
    }
    

    归并排序
    算法描述:

    void MSort(RedType R[], RedType &T[], int low, int high) {
      if(low == high) T[low] = R[low];
      else {
        int mid = (low + high) / 2;
        RedType S[];
        MSort(R, S, low, mid);
        MSort(R, S, mid+1, high);
        Merge(S, T, low, mid, high);
      }
    }
    
    void MergeSort(SqList &L) {
      MSort(L, L, 1, L.length);
    }
    

    算法分析:
    时间复杂度:(O(nlog_2n))
    空间复杂度:(O(n))

    算法特点:
    (1)是稳定排序
    (2)可用于链式结构,且不需要附加存储空间,但递归实现时仍需要开辟相应的递归工作栈。

    步履不停
  • 相关阅读:
    基本数据类型
    运算
    登录程序
    MySQL索引
    内存泄漏排查&CPU负载高排查
    dubbo
    SPI
    缓存,热点key
    Java BigDecimal
    Spring Bean's life
  • 原文地址:https://www.cnblogs.com/yuanyunjing/p/14974113.html
Copyright © 2011-2022 走看看