zoukankan      html  css  js  c++  java
  • Merge_Sort C++

    难点在于理解计算机执行顺序:

    1. 每次拆分(MergeSort)时,beg 和 end 的值
    2. 每次归并(Merge)时 L,R的内容
    3. 拆分的位置 在Merge_Sort退出时,带入Merge中

    在这里插入图片描述
    执行顺序图

    Merge_Sort.h

    #include<vector>
    #include<limits>
    void Merge(std::vector<int>& A, int beg, int mid, int end) {
       
        std::vector<int> L(A.cbegin() + beg, A.cbegin() + mid + 1);
        std::vector<int> R(A.cbegin() + mid + 1, A.cbegin() + end + 1);
        int i = 0, j = 0;
        L.insert(L.end(), std::numeric_limits<int>::max());
        R.insert(R.end(), std::numeric_limits<int>::max());
    
        for (int k = beg; k <= end; k++) 
        {
            if (L[i] < R[j]) 
                A[k] = L[i++];
            else 
                A[k] = R[j++];
        }
    }
    void MergeSort(std::vector<int>& A, int beg, int end) 
    {
        if (beg < end)
        {
            int mid = beg + (end - beg) / 2;
            MergeSort(A, beg, mid);
            MergeSort(A, mid + 1, end);
            Merge(A, beg, mid, end);
        }
    }
    

    main.cpp

    #include"Merge_Sort.h"
    #include<iostream>
    using namespace std;
    
    int main()
    {
        vector<int> arr = {38,27,43,3,9,82,10};
        cout << "
     array is 
    ";
        for (auto i : arr)
            cout << i << " ";
        cout << endl;
            MergeSort(arr, 0, arr.size()-1);
        cout << "
    Sorted array is 
    ";
        for (auto i : arr)
            cout << i<<" ";
        return 0;
    }
    
  • 相关阅读:
    go相关
    mac下使用vscode技巧
    mac下secureCRT的使用技巧
    python subprocess实时输出
    python中多级目录导入模块问题
    python的print与sys.stdout
    python中类相关笔记
    python中sys.stdout.flush()的作用
    nginx+uwsgi配置
    虚拟机的 基本配置
  • 原文地址:https://www.cnblogs.com/Z-s-c11/p/13828264.html
Copyright © 2011-2022 走看看