
数据结构&算法
简单的数据结构简单的算法
史蒂夫.*
这个作者很懒,什么都没留下…
展开
-
BFS&DFS
BFS&DFSBFS和DFS有一点需要注意,我们几乎是一定会对一个节点进行多次遍历,所以我们一定要注意,遍历一次以后记得更改该节点状态。BFS广度优先遍历的意思很明确,先对我们的当前节点的比较近的进行遍历。然后一点点往远处探索。这个时候我们就会有一个问题如何获取附近节点如何先遍历附近节点既然是遍历,那么一定会有遍历规则,所以我们根据规则进行遍历即可。那么第二个问题,我们如何先遍历附近节点。我们知道有一个数据结构队列,可以先进先出。我们只需要把先遍历的附近的放进去,然后继续遍历即可原创 2022-03-15 22:50:19 · 307 阅读 · 0 评论 -
JAVA 归并排序
网上关于八大数组的方式有很多,我这里就大概说一下他们的流程。归并排序的原理是分而治之,也就是说我们需要不断的分组,来使其不断分化从而对小的排序并不断放大。原理:找到中间值,然后尽可能的分成对应的两半,随后在这么做,知道从左查的下标比从右查的第一个下标大或者两者相等,停止。此时我们应该会得到两个数据,判断大小决定是否交换,随后在合并数组,重复步骤,其实原理不难理解,主要问题在于我们如何把数组分开排序?解决的办法是创建一个新的数组去排序,排序后把新数组的值附给部分原数组。代码如下: public st原创 2021-01-07 09:10:41 · 126 阅读 · 0 评论 -
JAVA 计数排序
计数排序不同于比较排序,它是以下标记录值的方式。规则:知道范围的数值(正数,有规律的负数)大量的文字表达比较抽象,我用例子作解释:大家看这个数据6,5,4,3,2,1是一个我们已知范围的数据(最大值为6)所以我们可以建立一个长度为7的数组,下标范围为0~6就可以表示所有的需要排列的数据。我们需要做的就是遍历我们的数据如果是6就让新数组下标为6的值自加1;如果是5就让下标为5的值自加1,以此类推。随后我们遍历新数组,通过值确定输出下标的次数,来完成输出。 public static void原创 2021-01-06 11:01:50 · 1085 阅读 · 9 评论 -
JAVA 希尔排序
希尔排序是一种相对高级的插入排序;想看插入排序戳这里原理:我们将待排序的数据分为几组并每组进行排序,则排序过后的数据重新分组(分更少的组);每组的数据虽然多了但是有了初次的排序,排序反而快速了。为了方便理解,我们举个例子:我们假设有六个数字并且他们的顺序为6,5,4,3,2,1那么初次分组的时候我们对数据长度除以2;也就是两两分组。如上述颜色所示6-3;5-2;4-1;此后对其进行插入排序。随后再次进行分组;此时分组为3/2=1所以只分一组就可以了。在进行插入排序。也就是说整个过程其实还原创 2021-01-06 10:02:06 · 133 阅读 · 0 评论 -
JAVA 选择排序
这个选择排序相对来说不难。原理:每次找到最小的数字并把它放到最左侧(默认是升序排列)由这个原理可知,我们做最坏打算需要进行循环次数是n-1次。比如321 排列为123则需要循环2次。所以终止循环的条件就可以写出来了。随后是判断何时换数据,由原理可知我们需要先找到最小数字再进行该数字与排序的第一个数字做交换。写出来就是: public static void Selectsort(int[] a) { for(int i = 0; i < a.length - 1; i++) {原创 2021-01-05 14:36:07 · 104 阅读 · 0 评论 -
JAVA 插入排序
插入排序比较好理解,就是从后往前找第一个比他小的值,放这个值的后边,也就是说我们需要将所有遍历过且不满足条件的数值下标后挪一位,为他腾出地方。那么在具体写的时候怎么写呢?和前几个排序一样,首先要知道交换条件,上边已经说了,当我们的当前这一位不符合我们想要的条件的时候就把他后挪一位,也就是a[i+1]=a[i];同时我们也要注意将这个需要插入的值放入序列。放入的条件是在保证下标>=0的同时当前遍历的值刚好小于插入值。public static void Insertsort(int[] a) {原创 2021-01-05 11:13:15 · 163 阅读 · 2 评论 -
JAVA快速排序
快速排序的原理:我们把最左边的第一个数据作为一个标准,然后设定两个常量作为下标,一个在数据最左侧,一个在数据最右侧,然后让标准值与这两个值作对比,如果左边下标的值比当前值小,则继续左下标加1,如果右边下标的值比当前值大,则右下标加1,当我们发现一个比他大,一个比他小的值后,我们让这两个值互换位置。诚如我们在冒泡排序中所说的,我们需要的做到交换数据,这个好理解,那么这个循环什么时候停止呢?我们思考一下,假设有n个数字,做最坏打算,在不断换位置的过程我们基本上在n/2次以后,我们几乎就所有的数据换了换位置。当原创 2021-01-05 10:31:13 · 95 阅读 · 0 评论 -
JAVA冒泡排序
最近决定从C++转战JAVA,所以在学了一些基本语句后,写一下简单算法,记录学习。冒泡排序冒泡排序网上的方法有很多,老师说这是最常见的面试问题,因此作一总结以备后用。注意:以下算法仅仅以从小到大的方式排序:冒泡排序顾名思义,就像鱼儿吐泡泡一样,一点点把大数往后移动。在移动的过程中,我们要注意两点:1.两数的交换2.判断什么时候结束,我们的这个过程其实如果没有终止条件就会一直进行循环,也就是说,排完序后,程序依旧会继续 遍历数组试图找到需要冒泡的数字。其实任何一种排序都需要理清这两件事情。数原创 2021-01-04 19:30:53 · 140 阅读 · 0 评论