数据结构与算法
文章平均质量分 96
韩顺平
@来杯咖啡
物极必反,否极泰来,法天象地,以定位也.
展开
-
Java实现基数排序
概念基数排序又叫桶排序。思想第一个桶是二维数组;第二个桶是一维数组。package com.atguigu.sort;import java.util.Arrays;public class RadixSort { public static void main(String[] args) { int[] arr = {1,45,545,678,34,26}; ...原创 2020-03-14 10:22:47 · 96 阅读 · 0 评论 -
Java实现希尔排序(插入排序)--O(nlogn)
概念希尔排序是插入排序的一种。思想分组grap,然后对每一组进行插入排序。package com.hdeasy.sort;import java.util.Arrays;/* * 地址:https://blog.csdn.net/wq_1995/article/details/81937926 * *①、基本思想:希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一...原创 2020-03-14 10:22:35 · 181 阅读 · 0 评论 -
排序算法的介绍
排序算法的介绍排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。排序的分类:内部排序: 指将需要处理的所有数据都加载到内部存储器(内存)中进行排序。外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储(文件等)进行排序。常见的排序算法分类(见右图):...原创 2020-03-14 10:18:15 · 148 阅读 · 0 评论 -
Java实现选择排序--O(n²)
package com.atguigu.sort;import java.util.Arrays;/* * 选择排序: 每趟只交换最小值和某值的位置,其他位置不允许动。 * */public class SelectSort { public static void main(String[] args) { int[] arr = {101,34,119,1}; for(int i =0;i<arr.length-1;i++) {//最后一个数肯定是原创 2020-11-17 10:06:49 · 87 阅读 · 0 评论 -
Java实现快速排序--O(nlogn)
package com.hdeasy.sort3;import java.util.Arrays;public class QuickSort { public static void main(String[] args) { // TODO Auto-generated method stub int[] arr = {0, 2, 4, 3, 1 }; so...原创 2020-05-02 12:53:06 · 198 阅读 · 0 评论 -
Java实现冒泡排序--O(n²)
package com.atguigu.sort;import java.util.Arrays;/* * 冒泡排序:每一趟都是相邻的两个元素进行比较;每一趟下来都会确定一个元素的位置(最大元素的值) * * */public class BubbleSort { public static void main(String[] args) { int[] arr= {3,9,-1,10,-2}; int temp = 0;//临时变量 i原创 2020-11-17 10:03:27 · 110 阅读 · 0 评论 -
Java实现简单插入排序--O(n²)
package com.atguigu.sort;import java.util.Arrays;import java.util.Scanner;/* * 插入排序。这是简单的插入排序 * */public class InsertSort { public static void main(String[] args) { //int[] arr = {4,3,5,1,2}; // (3,17)(25,14,20,9) //一般在公司笔试题中,更多的是这原创 2020-11-17 09:53:54 · 148 阅读 · 0 评论 -
Java实现归并排序--O(nlogn)
概念归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer) 策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修 补"在一起,即分而治之)。package com.atguigu.sort;import java.text.SimpleDateFor...原创 2020-03-14 10:22:26 · 118 阅读 · 0 评论 -
Java实现堆排序--O(nlogn)
堆排序堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是...原创 2020-04-02 09:09:05 · 222 阅读 · 0 评论 -
二分(折半)查找
二分查找:请对一个有序数组进行二分查找 {1,8, 10, 89, 1000, 1234} ,输入一个数看看该数组是否存在此数,并且求出下 标,如果没有就提示"没有这个数"。二分查找算法的思路package com.atguigu.search;/* 二分(折半)查找条件:有序数组。 * * */public class BinarySearch { public stat...原创 2020-03-14 12:06:09 · 99 阅读 · 0 评论 -
插值查找算法
插值查找算法插值查找原理介绍: 插值查找算法类似于二分查找,不同的是插值查找每次从自适应 mid 处开始查找。将折半查找中的求 mid 索引的公式 , low 表示左边索引 left, high 表示右边索引 right. key 就是前面我们讲的 findValint mid = low + (high - low) * (key - arr[low]) / (arr[high] - ...转载 2020-03-14 12:25:04 · 121 阅读 · 0 评论 -
查找算法介绍
在 java 中,我们常用的查找有四种:顺序(线性)查找二分查找/折半查找插值查找斐波那契查找扩展:—哈希表查找算法。线性查找算法有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称【顺序查找】 要求: 如果找到了,就提 示找到,并给出下标值。代码实现:package com.atguigu.search;public class S...原创 2020-03-13 20:00:02 · 88 阅读 · 0 评论 -
树结构介绍
一、树在谈二叉树前先谈下树和图的概念树:不包含回路的连通无向图(树是一种简单的非线性结构)树有着不包含回路这个特点,所以树就被赋予了很多特性1、一棵树中任意两个结点有且仅有唯一的一条路径连通2、一棵树如果有n个结点,那它一定恰好有n-1条边3、在一棵树中加一条边将会构成一个回路4、树中有且仅有一个没有前驱的结点称为根结点在对树进行讨论的时候将树中的每个点称为结点,根结点:没有父...原创 2020-03-15 12:09:55 · 1559 阅读 · 0 评论 -
各类树结构的特点
这里写目录标题各类树结构的特点顺序存储二叉树的特点:堆排序基本介绍二叉排序树:平衡二叉树左旋转右旋转双旋转多路查找树二叉树与 B 树二叉树的问题分析图为什么要有图图的举例说明图的常用概念图的表示方式邻接矩阵邻接表各类树结构的特点顺序存储二叉树的特点:顺序二叉树通常只考虑完全二叉树n: 表示二叉树中的第几个元素(特指索引,从0开始)第 n 个元素的左子节点为 2 * n + 1第 n 个元素的右子节点为 2 * n + 2第 n 个元素的父节点为 (n-1) / 2注原创 2020-11-13 20:17:12 · 2309 阅读 · 0 评论 -
线索化二叉树
package com.atguigu.tree.threadedbinarytree;import java.util.concurrent.SynchronousQueue;public class ThreadedBinaryTreeDemo { public static void main(String[] args) { //测试一把中序线索二叉树的功能 HeroN...原创 2020-03-16 21:30:08 · 113 阅读 · 0 评论 -
二叉排序树和平衡二叉树(二叉搜索树)
二叉排序树先看一个需求给你一个数列 (7, 3, 10, 12, 5, 1, 9),要求能够高效的完成对数据的查询和添加解决方案分析 使用数组数组未排序, 优点:直接在数组尾添加,速度快。 缺点:查找速度慢. [示意图]数组排序,优点:可以使用二分查找,查找速度快,缺点:为了保证数组有序,在添加新数据时,找到插入位 置后,后面的数据需整体移动,速度慢。[示意图] 使用链式存储-链...原创 2020-04-06 09:17:14 · 306 阅读 · 0 评论 -
二叉树遍历和查找
package com.atguigu.tree;public class BinaryTreeDemo { public static void main(String[] args) { //先需要创建一颗二叉树 BinaryTree binaryTree = new BinaryTree(); //创建需要的结点 HeroNode root = new HeroNod...原创 2020-03-14 21:12:21 · 217 阅读 · 0 评论 -
顺序存储二叉树
顺序存储二叉树的概念 基本说明从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组, 看右面的示意图。 要求:右图的二叉树的结点,要求以数组的方式来存放 arr : [1, 2, 3, 4, 5, 6, 6]要求在遍历数组 arr 时,仍然可以以前序遍历,中序遍历和后序遍历的方式完成结点的遍历 顺序存储二叉树的特点:顺序二叉树通...原创 2020-03-15 11:47:01 · 107 阅读 · 0 评论 -
双向链表
package com.atguigu.linkedlist;public class DoubleLinkedListDemo { public static void main(String[] args) { // 测试 System.out.println("双向链表的测试"); // 先创建节点 HeroNode2 hero1 = new HeroNode2(1,...原创 2020-03-14 10:21:51 · 151 阅读 · 0 评论 -
单向链表(my)
注意除了添加节点外,其他方式Hero temp = head.next;package com.hdeasy.linked;import java.util.Stack;import com.atguigu.linkedlist.HeroNode;public class SingeLinkedListDemo { public static void main(String[]...原创 2020-03-14 09:06:09 · 93 阅读 · 0 评论 -
数组模拟栈
package com.atguigu.stack;import java.util.Scanner;public class ArrayStackDemo { public static void main(String[] args) { //测试一下ArrayStack 是否正确 //先创建一个ArrayStack对象->表示栈 ArrayStack stack...原创 2020-03-14 10:20:31 · 84 阅读 · 0 评论 -
数组模拟环形队列
package com.atguigu.stack;import java.util.Scanner;public class ArrayStackDemo { public static void main(String[] args) { //测试一下ArrayStack 是否正确 //先创建一个ArrayStack对象->表示栈 ArrayStack stack...原创 2020-03-14 10:20:46 · 112 阅读 · 0 评论 -
约瑟夫问题(单向环形链表 )
约瑟夫问题的示意图 Josephu 问题Josephu 问题为:设编号为 1,2,… n 的 n 个人围坐一圈,约定编号为 k(1<=k<=n)的人从 1 开始报数,数到 m 的那个人出列,它的下一位又从 1 开始报数,数到 m 的那个人又出列,依次类推,直到所有人出列为止,由此 产生一个出队编号的序列。提示用一个不带头结点的循环链表来处理 Josephu 问题:...原创 2020-03-14 10:20:58 · 174 阅读 · 0 评论 -
数组模拟队列(非循环队列)
四个属性:private int maxSize; // 表示数组的最大容量private int front; // 队列头private int rear; // 队列尾private int[] arr; // 该数据用于存放数据, 模拟队列规则front和rear的初始指针是-1;队列满:rear=maxSize;对列空:rear=front;package com.at...原创 2020-03-14 10:22:58 · 149 阅读 · 0 评论 -
单向链表
package com.atguigu.linkedlist;import java.util.Stack;public class SingleLinkedListDemo { public static void main(String[] args) { //进行测试 //先创建节点 HeroNode hero1 = new HeroNode(1, "宋江", "及时...原创 2020-03-14 10:22:06 · 117 阅读 · 0 评论 -
哈希表(韩顺平)
哈希表的基本介绍散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通 过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组 叫做散列表。google 公司的一个上机题:有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,名字,住址…),当输入该员工的...原创 2020-03-14 10:20:13 · 176 阅读 · 0 评论