• 排序算法:归并排序


    归并排序就是将两个或两个以上的有序表合并成一个有序表的过程
    将两个有序表合并成一个有序表的过程称为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)可用于链式结构,且不需要附加存储空间,但递归实现时仍需要开辟相应的递归工作栈。

    步履不停
  • 相关阅读:
    C#获取本地IP地址
    C#中将字符串转换成数值
    JavaScript实现基于对象的双端队列
    Java网络编程
    JavaScript实现基于对象的队列
    JavaScript实现基于对象的栈
    JavaScript实现基于数组的栈
    发送短信按钮倒计时案例
    JavaScript动态显示时间
    html
  • 原文地址:https://www.cnblogs.com/yuanyunjing/p/14974113.html
Copyright © 2020-2023  润新知