数据结构
文章平均质量分 57
1128bei
这个作者很懒,什么都没留下…
展开
-
时间/空间复杂度计算
排序也称排序算法(Sort Algorithm),排序是将—组数据,依指定的顺序进行排列的过程。排序的分类:1)内部排序:指将需要处理的所有数据都加载到内部存储器(内存)中进行排序。2)外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储(文件等)进行排序。3)常见的排序算法分类度量一个程序执行时间的两种方法1)事后统计的方法...原创 2022-04-11 21:37:09 · 309 阅读 · 0 评论 -
Java实现全部7种排序算法
冒泡排序https://blog.csdn.net/jxiao_linbei/article/details/124107564?spm=1001.2014.3001.5501选择排序https://blog.csdn.net/jxiao_linbei/article/details/124107814?spm=1001.2014.3001.5501插入排序https://blog.csdn.net/jxiao_linbei/article/details/124108155?spm=1001.20原创 2022-04-11 21:17:13 · 395 阅读 · 0 评论 -
Java基数排序
基数排序(桶排序)介绍:1)基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用。2) 基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法3) 基数排序(Radix Sort)是桶排序的扩展4) 基数排序是1887年赫尔曼·何乐礼...原创 2022-04-11 21:04:20 · 118 阅读 · 0 评论 -
Java归并排序
归并排序介绍 :归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。图示1:图示2-合并相邻有序子序列:再来看看治阶段,我们需要将两个已经有序的子序列合并成一个有序序列,比如上图中的最后一次合并,要将[4,5,7,8]和[1,2,3,6...原创 2022-04-11 20:53:28 · 100 阅读 · 0 评论 -
Java快速排序
快速排序法介绍:快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。图示:代码:public class QuickSort { public static void main(String[] args) { //int[] arr = {-9,78,0,23.原创 2022-04-11 20:32:57 · 65 阅读 · 0 评论 -
Java希尔排序
希尔排序法介绍:希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。希尔排序法基本思想:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止图解:代码实现:public class ShellSort { public static v...原创 2022-04-11 20:27:03 · 87 阅读 · 0 评论 -
Java插入排序
插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。插入排序法思想:插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。图示:例题:有一群小牛,考试成绩分别是101,34,1...原创 2022-04-11 20:20:21 · 93 阅读 · 0 评论 -
Java选择排序
选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。选择排序思想:选择排序(select sorting)也是一种简单的排序方法。它的基本思想是:第一次从arr[o]~arr[n-1]中选取最小值,与arr[o]交换,第二次从arr[1]~arr[n-1]中选取最小值,与arr[1]交换,第三次从arr[2]~arr[n-1]中选取最小值,与arr[2]交换,…,第i次从arr[i-1]~ar...原创 2022-04-11 20:12:28 · 99 阅读 · 0 评论 -
Java冒泡排序
冒泡排序(Bubble Sorting)的基本思想是: 通讨对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过交换。从而减少不必要的比较。冒泡排序应用实例:我们举一个杲体的案例来说明冒泡法。我们将五个无序的数:3,9,-1,...原创 2022-04-11 19:58:44 · 92 阅读 · 0 评论 -
递归 - 八皇后问题(回溯算法)
八皇后问题介绍:八皇后问题, 是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出: 在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击, 即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。八皇后问题算法思路分析:1) 第一个皇后先放第一行第一列2) 第二个皇后放在第二行第一列、然后判断是否OK,如果不OK,继续放在第二列、第三列、依次把所有列都放完,找到一个合适...原创 2022-04-10 19:39:39 · 420 阅读 · 0 评论 -
递归 - 迷宫问题
说明:1)小球得到的路径,和程序员设置的找路策略有关即: 找路的上下左右的顺序相关2)再得到小球路径时, 可以先使用(下右上左),再改成(上右下左),看看路径是不是有变3)测试回溯现象4)思考: 如何求出最短路径?代码实现:public class maze { public static void main(String[] args) { //创建一个二维数组模拟迷宫 ...原创 2022-04-08 17:46:09 · 232 阅读 · 0 评论 -
数据结构与算法介绍
数据结构包括: 线性结构和非线性结构(一) 线性结构:数据元素存在一对一的线性关系. 顺序存储结构(数组):顺序存储线性表为顺序表, 顺序表中存储元素是连续的. 链式存储结构(链表):链式存储的线性表为链表, 链表中的存储元素不一定是连续的, 元素节点中存放的数据元素以及相邻元素的地址信息. 线性结构常见的有: 数组, 队列, 链表和栈.(二) 非线性结构: 非线性结构包括: 二维数组, 多维数组, 广义表, 树结构, 图结构.程序 = 数据结构 + 算法...原创 2022-03-09 09:51:39 · 118 阅读 · 0 评论 -
稀疏数组和队列
稀疏数组基本介绍 :当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:记录数组一共有几行几列,有多少个不同的值 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模 [例]: [0]行记录 : [ 有几行 ] [ 有几列 ] [ 有几个数值 ][例]: 编写五子棋程序[11*11], 有存盘退出和续上盘的功能.首先考虑使用二维数组来记录棋盘 : 该二维数组有很多值默...原创 2022-03-11 08:47:36 · 43 阅读 · 0 评论 -
Java实现链表
链表是以节点方式来存储, 是链式存储 每个节点包含data域, next域: 指向下一个节点 如图: 链表的各个节点不一定是连续存放的 链表分带头节点的链表和没有头节点的链表, 根据实际的需求来确定使用带head头的单向链表实现-水浒英雄排行榜管理1)完成对英雄人物的增删改查操作2)第一种方法在添加英雄时, 直接添加到链表尾部3)第二种方式在添加英雄时,根据排名将英雄插入到指定位置(如果有这个排名, 则添加失败,并给出提示)...原创 2022-04-07 20:20:22 · 645 阅读 · 0 评论 -
Java递归调用
递归用于解决什么样的问题?1)各种数学问题如: 8皇后问题,汉诺塔,阶乘问题,迷宫问题,球和篮子的问题 (google编程大赛)2)各种算法中也会使用到递归,比如快排,归并排序,二分查找,分治算法等.3)将用栈解决的问题 --> 递归代码比较简洁简单的说:递归就是方法自己调用自己, 每次调用时传入不同的变量. 递归有助于编程者解决复杂的问题, 同时可以让代码变得简洁。递归需要遵守的重要规则:1...原创 2022-04-08 11:26:06 · 801 阅读 · 0 评论 -
栈实现综合计算器
使用栈完成表达式的计算 思路:1. 通过一个 index 值(索引),来遍历我们的表达式2. 如果我们发现是一个数字, 就直接入数栈3. 如果发现扫描到是一个符号, 就分如下情况3.1 如果发现当前的符号栈为 空,就直接入栈 3.2 如果符号栈有操作符,就进行比较,如果当前的操作符的优先级小于或者等于栈中的操作符, 就需要从数栈中pop出两个数,在从符号栈中pop出一个符号,进行运算,将得到结果,入数栈,然后将当前的操作符入符号栈, 如果当前的操作符的优...原创 2022-04-08 10:58:24 · 86 阅读 · 0 评论 -
Java栈的实现
栈的介绍栈的英文为(stack) 栈是一个先入后出(FILO-First In Last Out)的有序列表。 栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。 根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除...原创 2022-04-08 10:03:24 · 466 阅读 · 0 评论