数据结构和算法
数据结构和算法
_否极泰来_
人是有命运的,文化属性和作用在不同人身上的自然规律决定了命和运,改变客观条件,才能改变命运。你是你自己的救世主!——遥远的救世主
展开
-
数据结构和算法(二十二)二分查找算法
1. 数据结构和算法(二十二)二分查找算法1.1 线性查找二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。 但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。1.2 二分查找代码实现package com.yuanxw.datastructure.chapter22;import java.util.Arrays;/** * 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。 * 但是,折半查找原创 2020-08-30 15:33:13 · 336 阅读 · 0 评论 -
数据结构和算法(二十一)线性查找算法
1. 数据结构和算法(二十一)线性查找算法1.1 线性查找线性查找又称顺序查找,是一种最简单的查找方法,它的基本思想是从第一个记录开始,逐个比较记录的关键字,直到和给定的K值相等,则查找成功;若比较结果与文件中n个记录的关键字都不等,则查找失败。1.2 线性查找代码实现package com.yuanxw.datastructure.chapter21;import java.util.Arrays;/** * 线性查找又称顺序查找,是一种最简单的查找方法,它的基本思想是从第一个记录原创 2020-08-30 15:19:31 · 308 阅读 · 0 评论 -
数据结构和算法(二十)基数排序算法
1. 数据结构和算法(二十)基数排序算法1.1 什么是基数排序基数排序 (Radix Sort) 是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。基数排序的发明可以追溯到 1887 年赫尔曼·何乐礼在打孔卡片制表机 (Tabulation Machine)上的贡献。基数排序法会使用到桶 (Bucket),顾名思义,通过将要比较的位(个位、十位、百位…),将要排序的元素分配至 0~9 个桶中,借以达到排序的作用,在某些时候,基数排序法的效率高于其它的比原创 2020-08-29 00:51:40 · 358 阅读 · 0 评论 -
数据结构和算法(十九)归并排序算法
1. 数据结构和算法(十九)归并排序算法1.1 什么是归并排序 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数开始,谁小就先取谁。然后再进行比较,如果有数列比较完了,那直接将另一个数列的数据依次取出即可。可以看出合并有序数列的效率是比较高的,可以达到O(n)。1.2 算法基本思想 归并排序的核心思想其实很简单,如果要排序一个数组,我们原创 2020-08-29 00:46:56 · 335 阅读 · 0 评论 -
数据结构和算法(十八)快速排序算法
1. 数据结构和算法(十八)基数排序算法1.1 什么是基数排序基数排序 (Radix Sort) 是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。基数排序的发明可以追溯到 1887 年赫尔曼·何乐礼在打孔卡片制表机 (Tabulation Machine)上的贡献。基数排序法会使用到桶 (Bucket),顾名思义,通过将要比较的位(个位、十位、百位…),将要排序的元素分配至 0~9 个桶中,借以达到排序的作用,在某些时候,基数排序法的效率高于其它的比原创 2020-08-29 00:29:06 · 241 阅读 · 0 评论 -
数据结构和算法(十七)希尔排序算法
1. 数据结构和算法(十七)归并排序算法1.1 什么是归并排序 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数开始,谁小就先取谁。然后再进行比较,如果有数列比较完了,那直接将另一个数列的数据依次取出即可。可以看出合并有序数列的效率是比较高的,可以达到O(n)。1.2 算法基本思想 归并排序的核心思想其实很简单,如果要排序一个数组,我们原创 2020-08-29 00:26:37 · 375 阅读 · 0 评论 -
数据结构和算法(十六)插入排序算法
1. 数据结构和算法(十六)快速排序算法1.1 什么是快速排序快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。1.2 算法基本思想 快速排序需要如下三步骤完成:从数列中挑出一个元素作为基准。重新排列数列,把所有的比基准小的放在基准前面,反之放在后面(一样大可任意一原创 2020-08-29 00:24:00 · 285 阅读 · 0 评论 -
数据结构和算法(十五)选择排序算法
1. 数据结构和算法(十五)插入排序算法1.1 什么是插入排序假设数列第一个元素为已排序数列,剩余数列为未排序将待排序元素挨个插入到已排序数列中每次插入都必须保证数列是有序的,即通过比较和移动有序数列中的元素,将元素插入到合适的位置。1.2 算法基本思想 插入排序的基本思想是:将数组的第一个数认为是有序数组,从后往前(从前往后)扫描该有序数组,把数组中其余n-1个数,根据数值的大小,插入到有序数组中,直至数组中的所有数有序排列为止。这样的话,n个元素需要进行n-1趟排序。1.3 插入排原创 2020-08-29 00:18:02 · 184 阅读 · 0 评论 -
数据结构和算法(十四)冒泡排序算法
1. 数据结构和算法(十四)选择排序算法1.1 什么是选择排序选择排序是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。1.2 算法基本思想 选择排序是每一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。分为三步:从待排序序列中,找到关键字最小的元素如果原创 2020-08-28 00:42:16 · 205 阅读 · 0 评论 -
数据结构和算法(十三)排序算法
1. 数据结构和算法(十三)冒泡排序算法1.1 什么是冒泡排序冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。1.2 算法基本思想 比较相邻的两个数,如果第一个数比第二个数大,则两数交换。对之后的相邻元素进行同样的工作,从开始到最后一对,这样进行一次排序后,数据的最后一位会是最大值 ,第一次循环进行的次数为 array.length-1。之后对所有的元素重复以上的步骤,且以后每次循环的次数为array.length-1-i (i为循环原创 2020-08-27 01:26:48 · 794 阅读 · 0 评论 -
数据结构和算法(十二)递归-汉若塔游戏
1. 数据结构和算法(十二)递归-汉若塔游戏1.1 汉诺塔 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。在线游戏地址:http://ertong.973.com/p114895汉诺塔游戏,玩法如下:1.有三根杆子A,B,C。A杆上有若干碟子2.每次原创 2020-08-27 01:15:45 · 249 阅读 · 0 评论 -
数据结构和算法(十一)递归-八皇后问题
1. 数据结构和算法(十一)递归-八皇后问题1.1 八皇后问题在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问一共有多少种摆法。大数学家高斯认为一共有76种摆法,1854年在柏林的象棋杂志上不同的作者发表了共计40种不同的见解,后来还有人利用图论的方法得出共有92种摆法。如何解决八皇后问题?使用递归回溯法,这种方法从棋盘的第一行开始尝试摆放第一个皇后,摆放成功后,递归一层,再遵循规则在棋盘第二行来摆放第二个皇后。如果当前位置无法摆放,原创 2020-08-25 00:55:19 · 385 阅读 · 0 评论 -
数据结构和算法(十)递归-迷宫游戏
1. 数据结构和算法(十)递归-迷宫游戏1.1 迷宫游戏 今天做一个简单的迷宫游戏,用二维数实现地图,让程序自动寻路的小游戏。1.2 简单的迷宫简单的迷宫用二维数实现地图,找路策略:【右->下->左->上】方式进行找路, 0:表示是路 1:表示迷宫墙 2:表示是通路 3:表示是不通。 package com.yuanxw.datastructure.chapter10;/** * 简单的迷宫 * 迷宫寻路的方法: * 找路策略:【右->下->左原创 2020-08-25 00:19:36 · 685 阅读 · 0 评论 -
数据结构和算法(九)递归
1. 数据结构和算法(九)递归1.1 什么是递归 在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。也就是说,递归算法是一种直接或者间接调用自身函数或者方法的算法。通俗来说,递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。1.2 递归的三大要素这个函数的功能他要完成什么样的一件事,而这个,是完全由你自己来定义的。也就是说,我们先不...原创 2020-03-18 01:33:02 · 273 阅读 · 0 评论 -
数据结构和算法(八)中缀表达式转逆波兰表达式
1. 数据结构和算法(八)中缀表达式转逆波兰表达式1.1 四则混合运算加法、减法、乘法、除法,统称为四则混合运算。其中,加法和减法叫做第一级运算;乘法和除法叫做第二级运算。表达式(算式):如:1+((2+3)*4)-5=16运算顺序:同级运算时,从左到右依次计算;两级运算时,先算乘除,后算加减。有括号时,先算括号里面的,再算括号外面的;有多层括号时,先算小括号里的,再算中括...原创 2020-02-21 22:14:58 · 1940 阅读 · 0 评论 -
数据结构和算法(七)栈的设计与实现
1. 数据结构和算法(七)栈的设计与实现1.1 什么是栈 栈是一种抽象数据结构,是对现实世界对象的模拟。比如,自助餐厅中的一叠盘子,新盘子放在这一叠盘子的最上面,取得时候也是从最上面取。将其抽象出来就是栈,这是最合适的抽象方式。栈的特点:栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进...原创 2020-02-21 22:13:47 · 907 阅读 · 0 评论 -
数据结构和算法(六)Java实现跳表
1. 数据结构和算法(六)Java实现跳表1.1 什么是跳表(Skip List) 跳表确实是一种性能比较优秀的动态数据结构,跳表(skip list) 对标的是平衡树(AVL Tree),是一种 插入/删除/搜索 都是 O(log n) 的数据结构。它最大的优势是原理简单、容易实现、方便扩展、效率更高。因此在一些热门的项目里用来替代平衡树,如 redis, leveldb 等。跳表的数据结...原创 2020-02-19 23:10:00 · 714 阅读 · 1 评论 -
数据结构和算法(五)Java实现双向链表
1. 数据结构和算法(五)Java实现双向链表1.1 什么是双向链表 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。value域–存放结点值的数据域prev域–存放结点的直接前继的地址(位置)的指针域(链域)next域–存放结点...原创 2020-02-17 17:23:10 · 522 阅读 · 0 评论 -
数据结构和算法(四)Java实现环形链表
1. 数据结构和算法(四)Java实现环形链表1.1 约瑟夫问题约瑟夫问题:公元66年,约瑟夫不情愿地参与领导了犹太同胞反抗罗马统治的起义,后来起义失败,他和一些宁死不降的起义者被困于一个山洞之中。罗马将军韦斯巴芗(Vespasian)派人来劝降,他主张投降,其余的人不答应,并以死相逼。最后,约瑟夫提议,与其死在自己的手上,不如死在彼此的手上。因此他便将游戏规则告知众人:N个人围成一圈,从第一...原创 2020-02-17 17:21:46 · 750 阅读 · 0 评论 -
数据结构和算法(三)图解单向链表反转
1. 数据结构和算法(三)图解单向链表反转 所谓的单链表反转,就是把每个节点的指针域由原来的指向下一个节点变为指向其前一个节点。一直觉得反转链表实现代码不是很好理解,今天用画图的方式去理解它。1.1 需求分析反转链表需求:输入:[HBase,Redis,Kafka]输出:[Kafka,Redis,HBase]分析:存在链表 HBase → Redis → Kafk...原创 2020-02-17 17:20:24 · 497 阅读 · 2 评论 -
数据结构和算法(二)Java实现单向链表
1. 数据结构和算法(二)Java实现单向链表1.1 什么是单向链表 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表;又称为结点列表,因为链表是由一个个结点组装起来的;其中每个结点都有指针成员变量指向列表中的下一个结点;链表是由结点构成,head指针指向第一个成为表头结点,而终止于最后一个指向NULL的指针...原创 2020-02-17 17:19:25 · 416 阅读 · 0 评论 -
数据结构和算法(一)Java实现循环队列
1. 数据结构和算法(一)Java实现循环队列1.1 什么是循环队列 循环队列:具有队头指针(front)和队尾指针(rear),指示队列元素所在的位置,避免删除元素时移动大量元素。队列也是一种线性表,只不过它是操作受限的线性表,只能在两端操作,先进先出(First In First Out,FIFO)。循环队列特性:只能队尾插入元素、在队头删除元素。先进先出(First In ...原创 2020-02-17 17:18:18 · 3598 阅读 · 4 评论