数据结构
文章平均质量分 57
Vivien_o.O
除非你不想赢,否则没人能让你输
展开
-
【排序算法】八大排序算法的基本原理及其实现,带你掌握排序算法
实现:插入排序实现:选择排序实现:快速排序代码实现:其他算法—明天更原创 2022-06-19 21:46:58 · 225 阅读 · 1 评论 -
字典树(单词查找树)详解
文章目录前言什么是字典树性质代码详解属性 & 构造器insert 插入searchPrefix 搜索前缀完整代码:前言当你在搜索条输入字符时,搜索引擎会根据你所输入的字符进行提示,这就是字典树的引用,他根据公共前缀来进行提示,可以减少不必要的比较。本文将从代码层面让你彻底了解字典树,以最简单的字典树开始,以达到扩展的目的。什么是字典树字典树又被称为单词查找树或者前缀树,Trie,是一种树形结构。典型应用是用于统计,排序和保存大量的字符串。它的优点是:利用字符串的公共前缀来减少查询时间,减原创 2022-02-20 21:18:57 · 1190 阅读 · 0 评论 -
HashMap的实现原理
文章目录概述属性方法get方法put方法remove方法hash方法resize方法总结概述哈希表是基于Map接口实现的,它允许NULL值和NULL键,它不是同步的,同时也不保证有序影响HashMap性能的两个重要参数:“initial capacity”(初始化容量)和"load factor"(负载因子),容量就是哈希表桶的个数,负载因子就是键值对的个数(注意不是一个桶中键值对的个数)与哈希表长度的一个比值,当比值超过负载因子之后,HashMap就会进行rehash操作进行扩容。Map 的这种实现原创 2022-01-08 09:03:50 · 475 阅读 · 0 评论 -
基数排序如何实现
文章目录基数排序简介实现原理基本解法:举例:java代码基数排序简介基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog®m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。实现原理基数排序的发明可以追溯到1887年赫原创 2021-11-29 23:17:19 · 120 阅读 · 0 评论 -
归并排序是如何实现的
文章目录归并排序归并排序介绍:基本思想代码归并排序归并排序介绍:归并排序是利用归并的思想实现的排序方法,该算法采用经典的分治策略,将问题分成小的问题然后递归求解,而治的阶段则将分的阶段得到的各答案修补在一起,即分而治之。基本思想其主要算法操作可以分为以下步骤:Step 1:将n个元素分成两个含n/2元素的子序列Step 2:用MS将两个子序列递归排序(最后可以将整个原序列分解成n个子序列)Step 3:合并两个已排序好的序列易知,MS的关键在于Merge过程。对于这一过程的理解,算法导论中原创 2021-11-23 10:30:30 · 1082 阅读 · 0 评论 -
什么是快速排序?
文章目录快速排序快速排序简介:基本思想原理快速排序法示意图排序演示Java代码快速排序快速排序简介:快速排序是对冒泡排序的一种改进。基本思想通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都小于或者等于另外一部分的所有数据,然后再按照此方法对这两部分数据分别进行快速排序,整个排序的过程可以递归进行,以此达到整个数据变成有序序列。原理设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它左边,所原创 2021-11-18 17:49:21 · 5173 阅读 · 0 评论 -
希尔排序是如何对插入排序进行优化的?
文章目录简单插入排序存在的问题希尔排序法介绍希尔排序的基本思想图解举例说明:第一次分组进行排序:第二次分组进行排序第三次分组进行排序简单插入排序存在的问题数组 arr =[2,3,4,5,6,1] 这个时候我们要插入的数1,过程是这样的;[2,3,4,5,6,6][2,3,4,5,5,6][2,3,4,4,5,6][2,3,3,4,5,6][2,2,3,4,5,6][1,2,3,4,5,6]当要插入的数是较小的数时,后移的次数明显增对,对效率有一定的影响。希尔排序就对简单插入排序进行了一原创 2021-11-17 22:04:23 · 611 阅读 · 0 评论 -
什么是插入排序?
文章目录插入排序简介插入排序简介插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。简单来说,就是将要排序的元素,分为两部分,一部分为有序表,一部分为无序表,每次从无序表中取出一个元素插入到有序表中。刚开始第一个元素我们认为他是有原创 2021-11-16 18:12:48 · 3547 阅读 · 0 评论 -
选择排序为什么是不稳定的?
文章目录选择排序是什么?:为什么说选择排序时不稳定的呢?选择排序是什么?:选择排序(Selection sort):是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法可以将数组分为两个部分,有序和无序。刚开始有序为空。每次从无序的队列中选出最小(最大)的数放在有序的队尾。如下图:原创 2021-11-16 12:26:58 · 19273 阅读 · 4 评论 -
。oO排序
冒泡排序(Bubble Sort):重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。举个简单的例子:小的在前,大的在后。6 9 5 3第一次从第一个开始比较,比较第一个和第二个的大小,如果后面的小就交换位置。然后比较第二个和第三个,以此类推。第一次比较n-1次第一次比较后:6 5 2 9在比较一次后,会把最大的数字沉到底部。然后进行第二次比较,原创 2021-11-14 10:56:09 · 394 阅读 · 0 评论 -
什么是八皇后问题?
八皇后问题:在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。思路分析:每次放一行,从第1行开始。每进入新的一行就从第1列开始判断是否符合规则。如果符合规则就进去下一行。不符合规则就放在下一列。如果将当前行的所有列放完都没有找到匹配规则的地方,就返回上一行的位置。返回上一行的位置之后,将棋子继续往后面原创 2021-11-09 20:36:25 · 334 阅读 · 0 评论 -
【递归】 迷宫问题
递归:程序调用自身的编程技巧称为递归( recursion)四条基本实现原则基准情形必须总有某些基准情形,它无需递归就能解除。不断推进对于那些需要递归求解的情形,每一次递归调用都必须要是求解状况朝基准情形的方向推进设计原则假设所有的递归调用都能运行。合成效益原则在求解一个问题的同一实例时,切勿在不同的递归调用中做重复工作递归算法一般用于解决三类问题:数据的定义是按递归定义的。(Fibonacci函数)问题解法按递归算法实现。这类问题虽则本身没有明显的递归结构,但用递归求原创 2021-11-08 18:54:16 · 117 阅读 · 0 评论 -
中缀表达式转换为后缀表达式,并计算
**中缀表达式:**中缀表达式是一个通用的算术或逻辑公式表示方法**后缀表达式:**也叫逆波兰式关系:中缀表达式:a+b后缀表达式:a b +我们对中缀表达式比较熟悉,对后缀表达式感觉难懂,但对于计算机来说,则后缀表达式比较好理解。首先我们先看看后缀表达式如何运算:1.a b +假设有一个栈中存放数值;从左到右我们如果遇见的是数值,则直接压入栈中,则栈中有a b 两个数值,当遇到运算符就从栈中取出两个数进行运算,将计算结果重新压入栈中,最后栈中的结构就是a+b;2.ab+c*ab+e/-原创 2021-11-05 20:29:58 · 1041 阅读 · 0 评论 -
用栈实现 简单的表达式的计算 中缀表达式
创建两个栈,一个用来存储数据,一个用来存储符号。当我们计算表达式的时候一般都是先算乘除然后从左到右进行计算,比如下面的式子。17 * 2 * 2 +15 -1 + 2 - 3我们先算17*2就算变成34,然后在算加之前会用34*2然后其余从左到右计算。我们用两个栈来模拟,首先将1 7放入数据栈,将 * 放入运算符栈。接着将2放入数据栈截下来在存入*之前我们进行比较,如果新存入的运算符的优先级小于等于已经在栈里面的我们就先将栈中的元素取出,从数据栈中取出两个元素进行运算将运算后的数据重新存入栈中原创 2021-11-04 17:04:12 · 384 阅读 · 0 评论 -
【单链表】单链表的增删改查
链表(Linked List)链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。单链表(single LinkedList)单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继原创 2021-11-01 10:14:27 · 664 阅读 · 0 评论 -
【Qenen】数组队列
队列介绍队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列是一个有序列表,可以用数组或者链表来实现遵循先入先出的原则。用数组来模拟循环队列队列本身是有序队列,若使用数组的结构来存储队列的数据,有一下声明。maxSize数组的最大长度。为用户定义。front 队列的头,初始化为0。rear 队列的尾,初始化为0. 即rear所原创 2021-10-29 15:05:41 · 156 阅读 · 0 评论 -
【稀疏数组】二维数组与稀疏数组之间的转换及文件存储
稀疏数组是干什么用的?在什么情况下该使用稀疏数组呢?当一个数组中的大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组是一个sum+1行3列的矩阵sum为不同元素的个数。稀疏数组的第一行保存的是原数组的行数和列数。其余的行保存的是元素的位置及值。比如:原数组是一个11行11列的矩阵 有两个不同的元素,第一个是第二行第三列元素为1第二个是第三行第四列元素为2(下标都是从0开始)稀疏数组的处理方法是:记录数组一共有几行几列,由多少个不同的值把具有不同值的元素的行原创 2021-10-27 20:17:37 · 140 阅读 · 0 评论