数据结构与算法
AngryHomo
敲代码,进大厂,挣大钱!
展开
-
排序算法---冒泡排序(java版)
冒泡排序原理冒泡排序(Bubble Sort)是一种简单的排序算法,它通过依次比较两个相邻的的元素,看两个元素是否满足大小关系要求,如果不满足则交换两个元素。每一次冒泡会让至少一个元素移动到它应该在的位置上,这样 n 次冒泡就完成了 n 个数据的排序工作。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。算法过程描述比较相邻的元素。如果第一个比第二个大,就交换它们两个;对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;针对所有的元素原创 2021-01-26 14:12:50 · 166 阅读 · 0 评论 -
排序算法---选择排序(java版)
简单选择排序原理选择排序(Selection Sort)的原理有点类似插入排序,也分已排序区间和未排序区间。但是选择排序每次会从排序区间中找到最小的元素,将其放到已排序区间的末尾。简单选择排序执行过程如下图代码实现public class SelectSort { public static void main(String[] args) { int arr[] = {34,1,139,101}; for (int i = 0; i < arr.l原创 2021-01-26 14:04:35 · 183 阅读 · 0 评论 -
排序算法---插入排序(java版)
直接插入排序原理直接插入排序(Insertion Sort)的原理是:将数组中的数据分为两个区间,已排序区间和未排序区间。初始已排序区间只有一个元素,就是数组的第一个元素。插入算法的核心思想是取未排序区间中的元素,在已排序区间中找到合适的插入位置将其插入,并保证已排序区间数据一直有序。重复这个过程,直到未排序区间中元素为空,算法结束。算法过程如下图所示算法描述如下:从第一个元素开始,该元素可以认为已经被排序;取出下一个元素,在已经排序的元素序列中从后向前扫描;如果该元素(已排序)大于新元素原创 2021-01-26 13:50:12 · 116 阅读 · 0 评论 -
排序算法---希尔排序(java版)
希尔排序原理先将待排序表分割成若干相隔某个“增量”的记录组成一个子表,对各个子表分别进行直接插入,当整个表中的元素已成基本有序是,再对全体记录进行一次直接插入排序。希尔排序主要解决直接插入排序因表中元素基本有序,但是部分元素离自己位置较远而引起交换次数较多的问题。希尔排序的排序过程如图所示代码实现public class ShellSort { public static void main(String[] args) { shellSort(); }原创 2021-01-26 13:35:47 · 291 阅读 · 0 评论 -
排序算法---归并算法(java版)
归并排序原理归并排序(Merge Sort)的核心思想是,如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。归并排序使用的是分治思想。分治思想分治,顾名思义,就是分而治之,将一个大问题分解成小的子问题来解决。小的子问题解决了,大问题也就解决了。分治思想一般都是用递归来实现的。分治是一种解决问题的处理思想,递归是一种编程技巧,这两者并不冲突。而对于递归就是要找到递推公式及终止条件,所以写出归并排序的递推公式 merg原创 2021-01-26 13:04:33 · 161 阅读 · 0 评论 -
排序算法---快速排序(java版)
快速排序原理快速排序(Quick Sort)算法,简称快排,利用的也是分治的思想,快排的思路是:如果要对 m->n 之间的数列进行排序,我们选择 m->n 之间的任意一个元素数据作为分区点(Pivot),然后我们遍历 m->n 之间的所有元素,将小于 pivot 的元素放到左边,大于 pivot 的元素放到右边,pivot 放到中间,这样整个数列就被分成三部分了,m->k-1 之间的元素是小于 pivot 的,中间是 pivot,k+1->n 之间的元素是大于 pivot原创 2021-01-26 12:48:52 · 153 阅读 · 0 评论 -
常用排序算法对比(时间复杂度、稳定性)
常用排序算法对比原创 2021-01-26 12:31:02 · 156 阅读 · 0 评论 -
排序算法---计数排序(java版)
计数排序原理计数排序(Counting Sort) 使用了一个额外的数组 C,其中第 i 个元素是待排序数组A 中值等于 i 的元素的个数。然后根据数组 C 来将 A 中的元素排到正确的位置。其实计数排序其实是桶排序的一种特殊情况。计数排序实现原理创建数组C,找出待排序的数组中最大和最小的元素;统计数组中每个值为 i 的元素出现的次数,存入数组 C 的第 i 项;对所有的计数累加(从 C 中的第一个元素开始,每一项和前一项相加);反向填充目标数组:将每个元素 i 放在新数组的第 C(i)项,原创 2021-01-26 12:25:41 · 160 阅读 · 0 评论 -
排序算法----桶排序(java版)
桶排序 原理 实现 时间复杂度原创 2021-01-26 11:04:44 · 1021 阅读 · 0 评论 -
Java常见数据结构以及特点、使用场景
Java常见数据结构以及特点Java中常见的数据结构,主要分为Collection和Map两种主要接口,程序中的数据结构是继承这些接口的数据结构类。Collection接口:List 接口继承:ArrayList、 Vector、 LinkedList等实现;Set 接口继承:HashSet、LinkedHashSet、TreeSet等实现。Map接口: HashMap、SortedMap继承,LinkedHashMap、TreeMap等实现。几个常用的类及其特点:ArrayLis原创 2020-12-15 11:36:44 · 2168 阅读 · 0 评论 -
数据结构与算法---队列
数据结构与算法—队列1. 队列的定义:队列(Queue )简称队,是一种操作受限制 的线性表 ,只允许在表的一端进行插入,而在表的另一端进行删除。向队列中插入元素称为入队或进队; 删除元素称为出队或离队。操作特性是先进先出(First In First Out,FIFO)。队头(Front):允许删除的一端;队尾(Rear):允许插入的一端。空队列:不含任何元素的空表。2. 队列的顺序存储:队列的顺序实现是指分配一块连续的存储单元存放队列中的元素,并附设两个指针:队头指针front指向队原创 2020-11-24 21:35:36 · 256 阅读 · 0 评论 -
数据结构与算法---稀疏数组
数据结构与算法—稀疏数组基本介绍: 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是: 1) 记录数组一共有几行几列,有多少个不同的值 ; 2) 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模 。二维数组与稀疏数组的转换:二维数组转系数数组的思路:1)遍历原始的二维数组,得到有效数据(非0)的个数sum;2)根据sum创建稀疏数组 sparseArr int [sum+1][原创 2020-11-23 20:32:53 · 194 阅读 · 0 评论