zoukankan      html  css  js  c++  java
  • 交互设计算法基础(11)- Merge Sort

      基本思想:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。

      算法流程:(迭代+两个有序数列合并为一个有序数列)

      时间复杂度:O(nlog(n)),归并算法是一种稳定排序算法。

    归并排序

    void MergeSort(int a[], int first, int last, int temp[]){
      if (first<last){
        int mid = (first+last)/2;
        MergeSort(a, first, mid, temp);
        MergeSort(a, mid+1, last, temp);
        MergeArr(a, first, mid, last, temp);
      }
    }

    子集排序:

    void MergeArr(int a[], int first, int mid, int last, int temp[]) {
      int i = first, j = mid+1;
      int m = mid, n = last;
      int k=0;
      //通过比较,归并数列a和b
      while (i<=m && j<=n) {
        if (a[i]<a[j])
          temp[k++] = a[i++];
        else
          temp[k++] = a[j++];
      }
      //将数列a或者b剩余的元素直接插入到新数列后边
      while (i<=m)
        temp[k++] = a[i++];
      while (j<=n)
        temp[k++] = a[j++];
    
      for (i=0; i<k; i++)
        a[first+i] = temp[i];
    }
  • 相关阅读:
    zoj 2812
    按1的个数排序
    输出等腰梯形
    约瑟夫环杂题
    九度oj 题目1369:字符串的排列
    .NET CORE LOG
    .NET CORE 配置
    dotnet core 数据库
    asp.net core mvc简介
    dotnet core 项目
  • 原文地址:https://www.cnblogs.com/x5115x/p/12638219.html
Copyright © 2011-2022 走看看