• 算法基础


    一:插入排序

    插入排序:对于少量的元素排序,它是个有效的算法。时间复杂度:N^2

    插入排序好比一手扑克牌。每次从桌上拿走一张牌将它按顺序插入正确的位置。为了找到这张牌的正确位置,我们需要从右到左依次比较(靠左最小)。

    伪代码如下:

    二:归并排序

    分治法:分解、解决、合并

    1:分解元问题为若干子问题,这些子问题是元问题的规模较小的实列。

    2:解决这些子问题,递归地求解各子问题。

    3:合并这些子问题的解就成元问题的解。

    归并排序完全遵循分治模式。关键是合并。

    假设(A,p,q,r) 其中A是一个数组,p、q和r是数组下标,满足p<=q<r。

    假设子数组A[p······q]和 A[q+1,·····r]都已经排好序

    只要合并两个子数组就可以替代A[p····r]。

     伪代码如下:

    时间复杂度:nlgn

    三:堆排序

    时间复杂度: nlgn

    最大堆:A[parent(i)]>=a[i]  结点的值至多与父结点一样大,堆中最大的元素为根结点。

    A.length 为给出数组的元素个数

    A.heap-size:有多少个堆元素存储在该数组中

     

    1.堆维护性质(Max-Heapify(A,i))

    用于维护最大堆性质。

    Max-Heapify(A,i)

    伪代码:

     2.建堆(Build-Max-Heap(A))

    利用Max-Heapify 把咦个大小为n=A.length的数组A[1``n]转化为最大堆。

    伪代码:

    3.堆排序算法

     堆排序利用Build-Max-Heap将输入数组A[1···n]建成最大堆,其中n=A.length,此时数组中最大元素总在根结点A[1]中

    这时候我们从堆中去掉结点n,调用Max-Heapify(A,1),从而在A[1,···n-1]构造一个新的最大堆。重复此过程,直到堆的大小从n-1降到2

    伪代码如下:

  • 相关阅读:
    如何解决列表框控件宽度不够的问题
    在windows Forms程序里面实现文件上传
    TFS的一些信息
    百钱百鸡问题
    如何移动SQL SERVER的系统数据库
    数据分页技术
    如何在报表中直接使用数据库中存储的图片
    重新注册MSJetOledb 4.0引擎
    2007 Microsoft Office Servers 已知问题/自述文件
    使用For XML与XSL(XSLT)配套快速输出查询结果到Web页面
  • 原文地址:https://www.cnblogs.com/lulup/p/4141185.html
Copyright © 2020-2023  润新知