![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
theLuckyLong
这个作者很懒,什么都没留下…
展开
-
通过递归的方式实现树形结构
通过递归的方式实现树形结构原创 2022-07-29 09:37:05 · 561 阅读 · 1 评论 -
算法心得----重新认识二分排序
题目描述思路这里其实是找出数组类型为:[***********############]中,第一个出现的#的问题,可以归类为二分查找,但是这道题不能视为普通的二分查找问题:普通的二分查找模板是:定义左边界 left定义右边界 right定义中间值 mid = (left + right)/2但是这道题应该将中间值定为: mid = left + (right-left)/2原因是:当left和right都是int类型时,如果两个值的初始值都超过int限定大小的一半,那么left+ri原创 2022-05-21 16:32:12 · 115 阅读 · 0 评论 -
算法心得----后继者(中序遍历+双指针)
题目描述思路题目很明显是需要中序遍历,这里需要找到中序遍历中,指定节点的后继节点(中序遍历的顺序是:左根右),即,可能会存在寻找左子节点的父节点情况,这里,最简单容易想到的是双指针+中序遍历非递归,其中一个指针用来遍历,另一个指针则指向当前遍历节点的上一个节点代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeN原创 2022-05-16 18:34:36 · 263 阅读 · 0 评论 -
斐波那契查找算法实现(转载)
该文章转载于斐波那契查找算法-梦小冷-博客园斐波那契查找算法什么是斐波那契查找算法?1.黄金分割点是把一条线段分割成两个部分,使得一部分与全长之比等于另一部分与这一部分之比,取其前三位的近似值大概是0.618。2.斐波那契数列{1,1,2,3,5,8,13,…}两个相邻数的比例无限接近0.618斐波那契思想1.斐波那契思想与二分法相类似,不过中间点不再是中点,而变成了黄金分割点的附近mid=low+F(k-1)-1,F代表斐波那契数列对于F(k-1)-1的含义的理解1.F代表的斐波那契数列转载 2020-08-11 09:32:34 · 152 阅读 · 0 评论 -
插值算法(二分查找兄弟算法)
设想一下这个情景:有这样一个数组arr[]={1,2,3,4,5,6,7},如果要查找边界值1的话,利用二分查找的效率,似乎不是那么的高,原因在于,二分查找每次定位都是在数组中间,不够灵活,如果有一种算法,可以根据要查找的值,自适应定位,那么效率显然就快很多,因而就有了插值算法,它的公式为:location = left + k × L其中,left代表数组最左边的下标,L是right - left,即数组最右下标与最左下标的差值,k是比例系数:k = (key - arr[left])/(arr[r原创 2020-08-10 12:05:24 · 359 阅读 · 0 评论 -
关于二分查找法以及改进
二分查找法是为了在一个有序的数组中快速找到目标元素的位置。常见的二分查找方法://二分查找法(传入的数组必须有序,这里默认升序) public static int binarySearch(int[] array,int left,int right,int key){ //递归退出条件 if(left > right)return -1; int mid = (left+right)/2; int value = arra原创 2020-08-09 16:47:21 · 521 阅读 · 0 评论 -
快速排序算法实现
public static void quickSort(int[] array,int start,int end){ if(start<end){ int pos = sort(array,start,end); quickSort(array,start,pos-1); quickSort(array,pos+1,end); } } public static int sor.原创 2020-08-05 21:10:44 · 89 阅读 · 0 评论 -
希尔排序算法实现
希尔排序算法本质上来说是直接插入排序算法的升级版,当数组元素大多数有序的情况下,插入排序的工作量较小,因此可以先对数组进行“预处理”,继而再进行直接插入排序,会效率得多。详见某大佬的图解希尔排序:https://www.sohu.com/a/341037266_115128以下是实现代码: public static void ShellSort(int[] array){ int length = array.length; //设置增量,并且逐步缩小 for(int gap =原创 2020-07-28 18:39:35 · 224 阅读 · 0 评论 -
插入排序的实现
插入排序的大致思想是:将数组分为有序部分和无序部分,遍历无序部分,依次插入有序部分,最后使整个数组有序。初始情况下,可以认为数组的第一个数所在区域为有序的,剩下部分为无序的。以下是代码的实现:public static void insertSort(int[] array){ //循环下标从1开始,表示无序的数组起始下标为1,而不是0 for(int i = 1 ; i < array.length ; ++i){ int value = array[i]; /原创 2020-07-28 10:41:04 · 120 阅读 · 0 评论 -
冒泡排序算法实现
冒泡排序,顾名思义就跟生活中的“冒泡”现象相似:大的泡泡被压在下面就会自主地往上浮起。在数组中,如果让一个无序的数组有序(例如升序),那么在数组左侧的较大的数就应该自主地向右移动。因此,从左向右开始,依次与相邻的(右侧)数进行比较,如果arr[i]>arr[i+1],则交换二者位置,i就变为了i+1(即i++),此过程就为“冒泡”那么如何优化?当某一次冒泡过程时,从来没有发生过数据交换,则表明该数组已经有序了,则可以退出循环。public static void BubbleSort(int原创 2020-07-27 15:29:09 · 166 阅读 · 0 评论 -
关于选择排序的两种实现方法
方法一:最外层的i代表排序后第i+1小的数(array[0]代表第1小,array[1]代表第2小…以此类推)内层的j用来筛选未参与排列的数组区,一旦发现有比array[i]还小的数,就与其交换public static void selectSort1(int[] array){ for(int i = 0 ; i<array.length-1 ; ++i){ for(int j = i+1 ; j<array.length ;j++){原创 2020-07-27 11:13:13 · 258 阅读 · 0 评论