zoukankan      html  css  js  c++  java
  • 归并排序的优化方法

    归并排序

    应用分治法的典型

    • O(nlogn)时间复杂度排序.

    • 每次将序列分成两部分,对两部分 分别递归排序

    • 将得到的结果合并,得到结果

    • 归并排序主要内容在分和合并,合并后就已经是有序序列,所以不用治

    • 合并: 最简单的想法是原序列的一个copy , 排序后赋值给元序列,这会付出额外的空间开销,而且重复赋值也会有开销

    • 优化的方法:

      • 设置一个索引数组b[i],记录原数组第i位排序后应该放到第几位,排序依据索引数组,只改变索引数组,避免了重复赋值的开销

        • 得到每个元素应该放的位置后将各个元素放到对应的位置,不适用额外的数组实现这一点需要一点技巧.
      • 减小递归的层数

        • 自底向上合并
        • 在规模比较小的情况下,使用冒泡排序替换递归求解
        • 对原数组进行一次遍历,得到已经是升序的区间,对这些区间进行合并

    减少重复赋值的优化

    
    #include 
    using namespace std;
    const int maxn = 1005;
    int a[maxn] ,n ,b[maxn];
    
    void init()
    {
        n = 10;
        for(int i=0;i=r)return;
        int mid = (l+r)/2;
        merge_sort(l,mid);
        merge_sort(mid+1,r);
        mer(l,mid,r);
    }
    
    int main()
    {
        init();
        for(int i=0;i
    落霞与孤鹜齐飞,秋水共长天一色
  • 相关阅读:
    pair<,>
    PTA 5-8 File Transfer (25)
    PTA 5-6 Root of AVL Tree (25)
    PTA 5-5 Tree Traversals Again (25)
    HDU4288 Coder(线段树)
    CodeForces 371D Vessels(树状数组)
    POJ2762 Going from u to v or from v to u(单连通 缩点)
    LightOJ 1030 Discovering Gold(期望 概率)
    HDU5115 Dire Wolf(区间DP)
    HDU4008 Parent and son(树形DP LCA)
  • 原文地址:https://www.cnblogs.com/star-and-me/p/8636874.html
Copyright © 2011-2022 走看看