zoukankan      html  css  js  c++  java
  • 《算法分析》作业4

    1. 问题

    n个不同的数构成的数组A[1..n]进行排序,其中n=2^k,要求用归并排序进行排序。

    2. 解析

    归并排序:当我们要对数组进行排序的时候,我们首先把这个数组分成一半,然后就是对左边的数组和右边的数组分别进行排序,之后将他们合并起来,然而对左右两边数组进行排序的时候要用到分治的思想,对左右两个数组进行归并排序,也就是说还得将左右两个数组在分成一半,然后对每个部分进行排序,再归并。

    如图模拟了归并的过程:

    3. 设计

    void merge(int l,int r,int mid)//排序过程
    
    {
    
        int aux[r-l+1],i,j;
    
        rep(k,l,r) aux[k-l]=a[k];
    
        i=l;
    
        j=mid+1;
    
        rep(k,l,r)
    
        {
    
            if(i>mid)
    
            {
    
                a[k]=aux[j-l];
    
                j++;
    
            }
    
            else if(j>r){
    
                a[k]=aux[i-l];
    
                i++;
    
            }
    
            else if(aux[i-l]>aux[j-l])
    
            {
    
                a[k]=aux[j-l];
    
                j++;
    
            }
    
            else
    
                {
    
                a[k]=aux[i-l];
    
                i++;
    
            }       
    
        }   
    
    }
    
    void merge_sort(int l,int r)//归并
    
    {
    
        if(l>=r)return ;
    
        int mid=(l+r)>>1;
    
        merge_sort(l,mid);
    
        merge_sort(mid+1,r);
    
        merge(l,r,mid); 
    
    }

    4. 分析

    复杂度分析:每次二分进行O(n)遍历,二分的复杂度为log(n)所以总的复杂度就是T=O(nlogn)

    5. 源码

    https://github.com/xiaojunjun601/sfHomework1/blob/master/%E4%BB%A3%E7%A0%81/guibing.cpp

  • 相关阅读:
    删除ubuntu中多余的主题和背景文件
    android 开发之动画Activity
    android开发之自定义组件
    android 开发之Activity切换
    程序设计课件
    初识Proximal Policy Optimization (PPO)
    初识Auction Theory
    什么是Experience Replay和Seperate Target Networks
    初识ActorCritic
    初识Stackelberg Game
  • 原文地址:https://www.cnblogs.com/zpj61/p/14592878.html
Copyright © 2011-2022 走看看