摘要:
算法分类 1.1 冒泡排序 1.1.1 算法介绍 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶 阅读全文
摘要:
1、递归 1.1 递归的应用场景(迷宫回溯问题) 1.2 递归概念 递归就是函数/方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时让代码变得简单。 1.3 递归快速入门 1、打印问题 2、阶乘问题 1.4 递归解决问题 1、各种数学问题:n皇后问题、汉诺塔 阅读全文
摘要:
1、栈的介绍 有些程序员也把栈称为堆栈,即栈和堆栈是同一个概念 栈的英文(stack) 栈是一个先入后出的有序列表 栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,另一端为固定的一端,称为栈底 根据堆栈的定义可知,最先放入栈中元素在栈底, 阅读全文
摘要:
1.8 希尔排序 1.8.1 算法介绍 1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。 1.8.2 算法描述 先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,具体 阅读全文
摘要:
1.7.1 算法介绍 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并 1.7.2 算 阅读全文
摘要:
奇偶排序 核心思想:奇数位和偶数位的数据交替比较,最终实现排序 代码实现: package main import "fmt" func IsSort(arr []int) []int { flag := false if len(arr) <= 1 { return arr } for flag 阅读全文
摘要:
1.5 堆排序 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。 核心思路: 1、depth := length/2 - 1 //节点深度,n,2n+1,2n+2 2、 阅读全文
摘要:
1.4 快速排序 1.4.1 快排介绍 基本思想:通过一趟排序将要排序的数据分隔成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 1.4.2 算法描述 快速排序使用分治法来把一个 阅读全文
摘要:
1.3 插入排序 1.3.1 算法介绍 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 1.3.2 算法描述 一般来说,插入排序都采用in-place在数组上实现。具体算 阅读全文
摘要:
1.2 选择排序 1.2.1 算法介绍 选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 阅读全文
摘要:
1、链表 本文讲解了单向链表、双向链表、环形链表以及约瑟夫案例 1.1 链表的介绍 链表是有序的链表,但是它在内存中的存储如下: 1.2 单链表的介绍 一般来说,为了更好的对单链表进行增删改查的操作,我们都会给他设置一个头结点,头结点的作用主要是用来标识链表头,本身这个节点不存放数据。 1.3 阅读全文
摘要:
1、队列(queue) 1.1 队列的应用场景 银行排队叫号 1.2 队列介绍 队列是一个有序列表,可以用数组或链表来实现 遵循先入先出的原则。即:先存入队列的数据要先取出,后存入的要后取出 示意图:(使用数组模拟队列示意图) 1.3 数组模拟队列 1、队列本身是有序列表,若使用数组的结构来存储 阅读全文
摘要:
学习视频:https://www.bilibili.com/video/BV114411D768 阅读全文