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]);
        }
    }
    
  • 相关阅读:
    Linux-vim
    [转载]关于eve模拟器上的VPS配置问题
    [转载]cisco 出现%Error opening tftp://255.255.255.255/cisconet.cfg解决方法
    CCNA-NAT
    CCNA-DHCP
    CCNA-ACL
    CCNA-OSPF 配置
    CCNA-OSPF 基础
    枚举的应用
    带索引的遍历
  • 原文地址:https://www.cnblogs.com/haoabcd2010/p/11081434.html
Copyright © 2011-2022 走看看