![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
DataStructure & Algorithms
数据结构及经典算法总结
芫荽_
会思考的芦苇。
展开
-
[排序算法]-拿捏堆排序法
彻底搞懂堆排序法基本介绍核心思想实例讲解主要思路图示演示代码实现 基本介绍 建堆-交换,往复进行至有序。 ——爱因斯坦 核心思想 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。 每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆 一般升序采用大顶堆,降序采用小原创 2020-08-24 17:27:03 · 162 阅读 · 0 评论 -
[排序算法]-拿捏基数排序法
彻底搞懂基数排序法基本介绍核心思想实例讲解主要思路图示演示代码实现 基本介绍 先分配后收集。从个位数开始将数据分配到对应数字桶中,然后再收集回原数组,依次处理到高位数为止。 ——爱因斯坦 核心思想 实例讲解 主要思路 。 图示演示 代码实现 Talk is cheap, show me the code. import java.io.*; import java.util.*; //Author:Peiliang Gong //DataStructure:[Josephu implemented原创 2020-08-24 16:59:05 · 137 阅读 · 0 评论 -
[排序算法]-拿捏归并排序法
彻底搞懂归并排序法基本介绍核心思想实例讲解主要思路图示演示代码实现 基本介绍 先分配后收集。从个位数开始将数据分配到对应数字桶中,然后再收集回原数组,依次处理到高位数为止。 递归加合并,先分解后合并。 ——爱因斯坦 核心思想 实例讲解 主要思路 。 图示演示 代码实现 Talk is cheap, show me the code. import java.io.*; import java.util.*; // Author:Peiliang Gong // MergeSort. class原创 2020-08-24 16:44:16 · 129 阅读 · 0 评论 -
[排序算法]-拿捏快速排序法
彻底搞懂快速排序法基本介绍核心思想实例讲解主要思路图示演示代码实现 基本介绍 使小于选定基准的数据在左边,大于的在右边,而后分而治之。 ——爱因斯坦 核心思想 实例讲解 主要思路 。 图示演示 代码实现 Talk is cheap, show me the code. import java.io.*; import java.util.*; // Author:Peiliang Gong // quickSort. class Sort { //main function pub原创 2020-08-24 16:23:21 · 113 阅读 · 0 评论 -
[排序算法]-拿捏希尔排序法
彻底搞懂希尔排序法基本介绍核心思想实例讲解主要思路图示演示代码实现对有序序列在插入时采用移动法对有序序列在插入时采用交换法 基本介绍 先将待排序的记录序列分成若干个子序列分别进行直接插入排序,待整个序列中的记录基本有序时,在对全体记录进行一次直接插入排序。 ——爱因斯坦 核心思想 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。 实例讲解 主要思路 希尔排序是把记录按下标的一定增量分组原创 2020-08-20 22:28:22 · 110 阅读 · 0 评论 -
[排序算法]-拿捏插入排序法
彻底搞懂插入排序法基本介绍核心思想实例讲解主要思路图示演示代码实现 基本介绍 待排序数据插入到前面已经排好的数据中,每次插完,前面又是新的排好的序列。 ——爱因斯坦 核心思想 插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。 实例讲解 主要思路 插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排原创 2020-08-20 20:20:29 · 91 阅读 · 0 评论 -
[排序算法]-拿捏选择排序法
彻底搞懂选择排序法基本介绍核心思想实例讲解主要思路图示演示代码实现 基本介绍 每次从剩下的数据中找最小的数值放在前面。 ——爱因斯坦 核心思想 选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。 实例讲解 主要思路 选择排序(select sorting)也是一种简单的排序方法。它的基本思想是:第一次从arr[0]-arr[n-1]中选取最小值,与arr[0]交换,第二次 arr[1]-arr[n-1]中选取最小值,与arr[1]交换,第三次从a原创 2020-08-20 19:43:32 · 132 阅读 · 0 评论 -
[排序算法]-拿捏冒泡排序法
彻底搞懂冒泡排序法基本介绍核心思想冒泡优化实例讲解代码实现 基本介绍 每相邻的数比较,小数沉底,大数上浮。 ——爱因斯坦 核心思想 通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒 冒泡优化 因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过交换。从而减少不必要的比较。 实例讲解 第一趟从第一个元素开始原创 2020-08-20 18:12:21 · 117 阅读 · 0 评论 -
[算法] - 拿捏递归算法
彻底搞懂什么是递归递归的概念递归的调用机制与规则递归遵守的重要规则以一个简单例子理会递归调用机制测试代码图示演示递归的主要应用场景 递归的概念 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。 ——爱因斯坦 递归的调用机制与规则 递归遵守的重要规则 执行一个方法时,就创建一个新的受保护的独立空间(栈空间) 方法的局部变量是独立的,不会相互影响, 比如n变量 如果方法中使用的是引用类型变量(比如数组),就会共享该引用类型的数据 递归必须向退出原创 2020-08-20 17:09:09 · 126 阅读 · 0 评论 -
[数据结构]-拿捏队列、链表、栈核心问题
总结队列、链表及栈的必要干货队列数组实现队列(数组只用一次)数组实现环形队列(数组可以复用)链表总结要点1总结要点2栈数组实现栈栈的主要应用场景中缀表达式转后缀表达式后缀表达式的计算 队列 数组实现队列(数组只用一次) 初始化: front 和 rear 指针的初始值为 -1 ; 栈空: front == rear; 栈满: rear == maxSize - 1; 入栈: rear++; arr[rear] = value; 出栈: front++; value = arr[front]; 数组实现环原创 2020-08-20 16:29:21 · 163 阅读 · 0 评论 -
[数据结构]-循环单向链表解决Josephu
循环单向链表实现约瑟夫环问题问题描述主要思路创建结点类创建循环单向链表类成员方法介绍完整代码 问题描述 经典的约瑟夫环问题为,一群小孩子手拉手围成一圈,然后指定某个小孩从1开始报数,直到报到M的小孩子出圈,然后下一个位置的孩子继续从1开始报数。游戏结束为圈中只剩下一个孩子。 主要思路 可以考虑通过使用循环单向链表来模拟该游戏的整个过程,解决该问题。 创建结点类 结点类主要包括结点的编号 no 属性和 Next 指针域 //Node class class Node{ public int no;原创 2020-08-20 12:51:51 · 175 阅读 · 0 评论 -
[数据结构]-带头结点的单链表进阶
带头结点的单链表进阶主要介绍统计单链表有效结点个数主要思路代码实现获取单链表倒数第K个结点主要思路代码实现实现将单链表反转主要思路代码实现实现单链表的逆序打印主要思路代码实现备注 主要介绍 对带头结点的单链表不太了解的可以参考[数据结构]-带头结点的单链表.本篇主要内容包括在之前的基础上添加一些进阶方法:统计单链表中有效元素个数,如何获得单链表中倒数第K个结点,如何实现单链表的逆序,如何实现单链表结点的逆序打印。 统计单链表有效结点个数 主要思路 通过辅助指针遍历整个链表,每访问一个结点则将统计的个数值加1原创 2020-08-18 22:40:49 · 264 阅读 · 0 评论 -
[数据结构]-带头结点的单链表初探
带头结点的单链表主要思路结点类说明属性成员方法主要代码链表类说明属性成员方法完整代码 主要思路 完成带头结点的单链表类 1、实现一个结点类,包括数据域和next指针域; 2、单链表主要属性包括:数据域为空的头结点; 3、单链表主要成员方法包括:增(在链表末尾添加一个结点,按照顺序添加一个结点),删(删除指定编号的结点),改(更新某个结点信息),查(按照编号进行查询,查询所有的数据)。 结点类说明 属性 1、no:编号,头结点编号默认为0; 2、name:结点的名字; 3、next:指向下一个结点的指针,头结原创 2020-08-18 21:22:25 · 286 阅读 · 0 评论 -
[数据结构]-数组实现环形队列之关键
数组实现环形队列主要思路属性说明成员方法说明完整代码 主要思路 实现队列类 主要属性包括:存储数据的数组arr[],数组的大小maxSize,队首指针front,队尾指针rear; 主要方法包括:判断队列是否为空,判断队列是否已满,入队操作,出队操作,获得队首元素,获得队列存储的元素数量,遍历队列所有的元素。 属性说明 1、maxSize:最多可以存储的数据量; 2、front:队首指针,默认值为0,出队时使用; 3、rear:队尾指针,默认值为0,入队时使用; 4、arr[]:用于存储队列元素的数组 成原创 2020-08-18 16:51:11 · 129 阅读 · 0 评论