zoukankan      html  css  js  c++  java
  • 算法基础

    一:插入排序

    插入排序:对于少量的元素排序,它是个有效的算法。时间复杂度: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

    伪代码如下:

  • 相关阅读:
    看淘宝营销api 文档有感
    创业公司如何做好数据驱动的开发工作
    docker 常见错误总结
    从npm 角度理解 mvn 的 pom.xml
    best practices for designing web api
    我对自动化测试的一些认识
    Docker学习笔记
    Docker命令学习
    JVM学习笔记三:垃圾收集器与内存分配策略
    JVM学习笔记二:JVM参数
  • 原文地址:https://www.cnblogs.com/lulup/p/4141185.html
Copyright © 2011-2022 走看看