数据结构和算法
Adorenine9
这个作者很懒,什么都没留下…
展开
-
查找算法(线性查找、二分查找、插值查找、斐波那契查找)
查找算法查找算法: 线性查找、二分查找(折半查找)、插值查找、斐波那契查找1.线性查找: 逐一比对,循环遍历,发现有对应的值则返回下标索引,对序列是否有序没有要求。代码:public class seqSearch { public static void main(String[] args) { int[] arr = {1,9,11,-1,34,89}; int i = seqSearch(arr, 11); System.out原创 2022-01-05 11:55:22 · 249 阅读 · 0 评论 -
排序算法(归并排序)
归并排序介绍: 归并排序是建立在归并操作上的一种有效的排序算法,该算法是分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。需求:排序前:{8,4,5,7,1,3,6,2}排序后:{1,2,3,4,5,6,7,8}排序原理:1.尽可能的一组数据拆分成两个元素相等的子组,并对每一个子组继续拆分,直到拆分后的每个子组的元素个数是 1为止。2.将相邻的两个子组进行合并成一个有序的大组;3.原创 2022-01-03 11:16:01 · 493 阅读 · 0 评论 -
排序算法(快速排序)
快速排序介绍: 快速排序是对冒泡排序的改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的数据都比另外一部分的所有数据要小,然后按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 代码:public class quickSort { public static void main(String[] args) { int[] arr = {-9,78,0,23,-567,70}; q原创 2022-01-03 11:14:04 · 344 阅读 · 0 评论 -
排序算法(希尔排序)
希尔排序(shellSort)介绍: 希尔排序又叫缩小增量排序,是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序,随着增量逐渐减少,每组包含的关键词越来越多,当增量减少至1时,整个数组恰好被分为一组,算法终止。缩小增量后可以采用两种排序法:交换(冒泡)、位移(插入) 后者效率更高。代码:public class shellSort { public static void main(String[] args) { int[] nums = {8,9,1,7,原创 2022-01-03 11:09:43 · 314 阅读 · 0 评论 -
排序算法(插入排序)
插入排序:时间复杂度: 最坏的情况(每次插入都遍历一遍已经排好序的数组): 外层循环n-1次,内层循环1+2+3+…+(n-2)=(n-2)(n-1)/2次 所以最坏情况是O(n^2) 按照代码,最好的情况(已经有序):O(n) 平均情况为:(n^2 + n)/2,因为二次函数比一元一次函数增长快, 所以为插入排序算法的时间复杂度为O(n^2) 简介: 基本思想:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1原创 2021-12-30 15:00:10 · 1601 阅读 · 0 评论 -
排序算法(选择排序)
简介: 选择排序基本思想是:第一次从arr[0]-arr[n-1]中选出最小的元素,让它和arr[0]交换,第二次则从arr[1]-arr[n-1]中选出最小的元素和arr[1]交换…总共交换n-1次使得序列变成从小到大的有序序列。 优化: 在排序过程中可以加入标志位,当某次排序过程中,未发生元素交换,则说明此时序列已经是有序的了,则可以提前退出排序循环。代码实现public class selectSort { public static void main(String[原创 2021-12-30 14:58:34 · 490 阅读 · 0 评论 -
排序算法(冒泡排序)
冒泡排序 简介:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻的元素的值,若发生逆序则交换,使值较大的元素逐渐从前移向后部,就像水底的气泡逐渐向上冒。时间复杂度:O(n^2) 优化:排序过程中各元素会不断地接近自己的位置,如果一趟比较下来没有进行过交换,则说明序列此时已经有序了,因此在排序过程中我们可以添加标志位flag,判断元素是否发生交换,如果未发生交换则可以提前结束排序。public class bubbleSort { public static void main原创 2021-12-29 08:47:17 · 101 阅读 · 0 评论 -
递归-八皇后问题(回溯算法)
递归-八皇后问题(回溯算法)1.概述: 在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列 或同一斜线上,问有多少种摆法。2.示意图上图为八皇后问题的其中一种解法3.步骤:1.第一个皇后先放第一行第一列 2.第二个皇后放在第二行第一列,然后判断是否成立,如果不成立,继续放在第二列、第三列、第四… 依次把所有的的列放完,直到找到一个满足的解 3.继续放第三、第四…个皇后,直到所有的皇后全部放在了不冲突的位置,得到了一个正确的原创 2021-11-23 16:25:13 · 532 阅读 · 0 评论 -
数据结构与算法之递归
递归1.递归应用场景: 迷宫回溯问题,递归(rescursion)2.递归的概念: 简单的说:递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码变得更简洁。3.递归调用机制: 1.打印问题:public static void test(int n) { if (n >= 2) { test(n - 1); //运行到此处会将方法递归调用完,最后才会进行下面的打印输出操作 (所以打印结果原创 2021-11-21 09:49:04 · 408 阅读 · 0 评论