zoukankan      html  css  js  c++  java
  • 算法分析与设计(work4)

    问题

    对n个不同的数构成的数组 A[1..n]进行排序,其中 n=2^k。
    排序方法使用二分归并排序。

    解析

    归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。
    步骤:
    1)、把长度为n的输入序列分成两个长度为n/2的子序列;
    2)、对这两个子序列分别采用归并排序;
    3)、将两个排序好的子序列合并成一个最终的排序序列。

    设计

    核心伪代码:

    split each element into partitions of size 1
    recursively merge adjacent partitions
      for i = leftPartIdx to rightPartIdx
        if leftPartHeadValue <= rightPartHeadValue
          copy leftPartHeadValue
        else: copy rightPartHeadValue
    copy elements back to original array
    

    分析

    对于长度为n的数组将其分成子序列时间复杂度 (O(logn)),每次数组中的n个数都需要被遍历一遍时间复杂度 (O(n)),总时间复杂度 (O(logn) imes O(n)=O(nlogn))

    源码

    https://github.com/HaHe-a/Algorithm-analysis-and-design-code/tree/master/Desktop/work4

    越自律,越自由
  • 相关阅读:
    站立会议第四天
    站立会议第三天
    站立会议第二天
    站立会议第一天
    团队项目估算
    团队计划会议
    《人月神话》阅读笔记01
    《构建之法》阅读笔记06
    微软买书问题
    找水王2
  • 原文地址:https://www.cnblogs.com/ha-chuochuo/p/14598315.html
Copyright © 2011-2022 走看看