![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
氵何章怀晓 。
阿尔卡拉大学企业管理硕士
北亚利桑那大学计算机信息技术硕士
展开
-
算法之堆排序
堆是一种数据结构,是具有特定条件(任何节点大于等于子节点的值(左右子节点大小没有定义))的顺序存储(树从树根开始 从上到下从左到右依次存储到数组里)的完全二叉树。思想:1.将待排序序列构建成大小顶堆(大顶堆升序 反之降序)从最后一个非终端节点(n/2 n是数据总数 得到结果向下取整 获得最后一个非终端节点的下标)层进行调整,然后在一层层往上(从下往上),一直到根2.此时最大(小...原创 2020-03-28 10:50:33 · 155 阅读 · 0 评论 -
查找算法之斐波那契(黄金分割点)查找
斐波那契数列:{1,1,2,3,5,8,13,21,34,55…} 相邻两个数的比例很接近0.618思想:仍然是改变mid的值来找到最佳索引位置==》mid = left+F[k-1]-1数组中记录的个数为某个斐波那契数小1,即n=F(k)-1;(总长度F[k]-1 == F[k-1]-1 + F[k-2]-1)如果数组长度不够,那么要进行扩容(增加到F[k]-1,扩容部分为源数组末...原创 2020-03-22 14:53:58 · 677 阅读 · 0 评论 -
查找算法之插值查找
插值算法的前提是有序的,和二分查找很像,只是在定义mid的值,二分是不断折半,插值是通过公式计算得来的,可以一次找到。注意事项:在数据量大的情况且关键字分布均匀时速度很快关键字分布不均匀不一定比这半查找快代码实现:package chazhao;import java.util.Arrays;public class InsertValueSearch { public ...原创 2020-03-20 11:24:41 · 117 阅读 · 0 评论 -
查找算法之线性查找和二分查找
查找算法即在数据中查找自己指定的值,我们这里是返回对应的下标。1.线性查找(顺序查找)很简单:代码实现:package chazhao;import java.util.ArrayList;import java.util.List;public class LineChazhao { public static void main(String[] args) { ...原创 2020-03-19 21:25:09 · 238 阅读 · 0 评论 -
算法之计数排序
计数排序诞生于1954年,适用场景:数据大,范围小,啥意思,给公司员工按照年龄排序,假如2万个员工,但是年龄区间很小,这时候就可以用计数排序。基本步骤:源数组遍历,把每个元素出现的次数标记在计数数组对应下标上遍历计数数组,从下标1元素开始,每个元素等于当前下标+ 前一个下标的值(记录该数字在排序后的出现位置)倒叙遍历源数组,按照累加数组中记录的源数组中每个数据在排序后应该出现的位置,把数据...原创 2020-03-18 17:54:00 · 134 阅读 · 0 评论 -
算法之基数排序
基数排序是很经典的空间换时间排序,是非比较排序,假如我们有一堆数据,每一位上的数据都是0-9之间,那么我们就可以创建10个桶,装不同位上对应的数据,然后在把同理的数据按照0-9桶的顺序赋给源数组,这样就完成了基数排序。注意:排序几轮是看数据中最大位的数据是几位。来个图:代码实现: import java.text.SimpleDateFormat;import java.util.Ar...原创 2020-03-16 14:56:27 · 135 阅读 · 0 评论 -
算法之快速排序
思想:先找一个基准数(我习惯把最左边的数作为基准数)从两边开始检索,先检索右边比基准数小的,在检索左边比基准数大的检索到了,停下交换元素再继续检索两边下标重合,检索完毕把基准数和重合位置的数据交换第一轮交换完成(基准数左边都比它小,右边都比它大)递归重复先来个图(百度上搜的图,意思差不多):代码实现: import java.text.SimpleDateFormat;...原创 2020-03-14 12:27:56 · 164 阅读 · 0 评论 -
算法之Shell排序
希尔排序是对插入排序的优化,假如一组数据,最小值在末尾,那么插排的效率较低,需要大量的移动。希尔排序针对此进行了优化,1959年一个叫shell的哥们,想出了间隙排序法(大牛的脑子就是不一样),啥意思呢?就是把一组数据,通过一定的间隙,看成不同的数组,然后每一组数据在进行插排,间隙为1的的希尔排序就是插排。来个图:~~这个图就是把10个数据分为了5组,然后每2个一小组,每组进行插排,采用的...原创 2020-03-13 11:33:14 · 172 阅读 · 0 评论 -
递归
假设有一块地图,从出发点到终点,有很多种路径,我们可以指定路径策略来指定先后顺序。public class Hello { public static void main(String[] args) { //创建二维数组 int[][] map = new int[8][7]; //1代表墙,上下 for (int i =...原创 2020-02-28 14:13:43 · 110 阅读 · 0 评论