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

    思路

    利用二分思想,划分左右区间,并让左右区间排序完成后,进行合并

    # include <cstdio>
    # include <iostream>
    # include <algorithm>
    using namespace std;
    # define MX 100005
    /**************************/
    int cparr[MX];
    
    /// 归并排序
    void mergesort(int arr[], int l, int r) {
        if (l==r) return;
        int mid = (l+r)/2;
        mergesort(arr, l, mid);
        mergesort(arr, mid+1, r);
        // 左右数组已排序完成,合并
        int index = l;
        int tl = l, tr = mid+1;
        while(tl <= mid && tr <= r) {
            if (arr[tl] <= arr[tr]) cparr[index++] = arr[tl++];
            else cparr[index++] = arr[tr++];
        }
        while(tl<=mid) cparr[index++] = arr[tl++];  // 处理掉某一个数组没处理完的
        while(tr<=r) cparr[index++] = arr[tr++];
        for (int i=l; i<=r; i++) arr[i] = cparr[i];  // 拷贝回原数组
    }
    
    int main() {
        int nums[6] = {5, 1, 1, 2, 0, 0};
        // stable_sort(nums, nums+6);
        mergesort(nums, 0, 5);
        for (int i=0; i<6; i++){
            printf("%d ", nums[i]);
        }
    }
    
  • 相关阅读:
    啃掉的博文全记录
    DP五十题
    noip 真题班刷题记录及总结思考
    dfklsJj
    【2018.11.7】luogu NOIp热身赛 及刷题思考
    【trie树专题】
    【倍增专题】
    10.23
    简析 NP 问题 和P问题
    [NOIP 2010普及组 No.4] 三国游戏
  • 原文地址:https://www.cnblogs.com/haoabcd2010/p/11081434.html
Copyright © 2011-2022 走看看