排序算法:归并排序

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

步履不停
原文地址:https://www.cnblogs.com/yuanyunjing/p/14974113.html