算法初级

排序算法列表
https://zh.wikipedia.org/wiki/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95#排序算法列表
冒泡排序 http://bubkoo.com/2014/01/12/sort-algorithm/bubble-sort/
插入排序 http://bubkoo.com/2014/01/14/sort-algorithm/insertion-sort/
桶排序 http://bubkoo.com/2014/01/15/sort-algorithm/bucket-sort/
常见排序算法归档:http://bubkoo.com/tags/algorithm/

算法的5个特征

  • 输入:一个算法必须有零个或以上输入量。
  • 输出:一个算法应有一个或以上输出量,输出量是算法计算的结果。
  • 明确性:算法的描述必须无歧义,以保证算法的实际执行结果是精确地匹配要求或期望,通常要求实际运行结果是确定的。
  • 有限性:算法必须在有限个步骤内完成任务。
  • 有效性:又称可行性,能够实现,比如:通过代码让电脑生个孩子出来是不可行的。

数据结构

就是数据的结构。

一般来说是这样的:

  1. 我们要解决一个跟数据相关的问题
  • 分析这个问题,想出对应的数据结构
  • 分析数据结构,想出算法

先分析数据的结构,再想出对应的算法
数据结构和算法是互相依存、不可分开的

你学习完排序算法,就能了解常见的数据结构

5种排序算法

  • 身高两两对比法(冒泡排序,按顺序两两对比交换位置)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    以数组 arr = [5, 1, 4, 2, 8] 为例说明,加粗的数字表示每次循环要比较的两个数字:
    第一次外循环
    ( **5 1** 4 2 8 ) → ( **1 5** 4 2 8 ), 5 > 1 交换位置
    ( 1 **5 4** 2 8 ) → ( 1 **4 5** 2 8 ), 5 > 4 交换位置
    ( 1 4 **5 2** 8 ) → ( 1 4 **2 5** 8 ), 5 > 2 交换位置
    ( 1 4 2 **5 8** ) → ( 1 4 2 **5 8** ), 5 < 8 位置不变
    第二次外循环(除开最后一个元素8不动,对剩余的序列)
    ( **1 4** 2 5 8 ) → ( **1 4** 2 5 8 ), 1 < 4 位置不变
    ( 1 **4 2** 5 8 ) → ( 1 **2 4** 5 8 ), 4 > 2 交换位置
    ( 1 2 **4 5** 8 ) → ( 1 2 **4 5** 8 ), 4 < 5 位置不变
    8固定在最后
    第三次外循环(除开已经排序好的最后两个元素,可以注意到上面的数组其实已经排序完成,但是程序本身并不知道,所以还要进行后续的循环,直到剩余的序列为 1)
    5,8固定不变
    ( **1 2** 4 5 8 ) → ( **1 2** 4 5 8 )
    ( 1 **2 4** 5 8 ) → ( 1 **2 4** 5 8 )
    4,5,8固定不变
    第四次外循环(最后一次)
    ( *1 2* 4 5 8 ) → ( *1 2* 4 5 8 )
  • 体育老师一指禅法(选择排序,每次从一堆中选出最小的那个数排到最前面,然后后面剩余的数重复这个步骤)

  • 整理扑克牌法(插入排序)

  • 桌上散落的扑克牌整理法(桶排序、基数排序)

  • 快排(每次选择第一个数作为基准,比它小的放左边,比它大的放右边)

  • 随机快排(每次快排随机选择一个数站定分割左右)
  • 归并排序
  • 堆排序

排序算法js代码

https://www.cnblogs.com/Unknw/p/6346681.html

排序可视化

排序可视化:https://visualgo.net/zh/sorting

-------------本文结束感谢您的阅读-------------