算法
奔跑的钰神
这个作者很懒,什么都没留下…
展开
-
Java 堆排序
堆排序 是一个时间复杂度为O(nlogn)的排序算法,基于它的效率比较好。同时利用了完全二叉树的概念。 算法描述如下 /** * 堆排序 基于完全二叉树 * @param arr */ public static void heapSort(int arr[]){ for(int i = arr.length/2;i>=0;i--){ arrHeap(arr,i,arr.length); }原创 2020-07-12 17:25:20 · 202 阅读 · 0 评论 -
java 基于数组实现循环队列
队列的实现方式可以通过链表和数组,大多数是链表,但是在使用中有不少要求使用数组的数据结构,抱着好奇的心态写了如下数据结构及其相关的方法 /** * @author zy * @date 2020/6/17 19:31 */ public class ArrayQueue { /* 长度为maxSize-1 */ private int maxSize; private int rear; private int front; private i原创 2020-06-21 11:14:33 · 226 阅读 · 0 评论 -
java实现二分查找-递归和非递归
二分查找算法思想 有序的序列,每次都是以序列的中间位置的数来与待查找的关键字进行比较,每次缩小一半的查找范围,直到匹配成功。 一个情景:将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。 二分查找的使用条件 数组必须为有序数组, 比较次数少,查询快 代码实现 非递归实现 /原创 2020-06-08 10:15:17 · 198 阅读 · 0 评论 -
java数组的排序算法Sort()方法分析
作为java语言的使用者,我们应该都知道java自动封装了Array的工具类,其中我们可能常用的Sort排序方法到底是调用了哪个排序方法呢? JDK8中Arrays.sort的底层原理,调用的是插入排序,归并排序和快速排序。简单来说就是根据数组长度的大小选择合适排序方法。 元素少于47用插入排序 元素大于等于47小于286的用快速排序 至于大于286的,它会进入归并排序(Merge Sort),但在此之前,它有个小动作(就是看数据具不具备结构) 结构简单来说也就是局部有序。 下面是测试算法 public原创 2020-06-07 10:07:54 · 971 阅读 · 0 评论 -
java 二叉排序树 插入 查找 删除(经典)
我们在原有的树的数据结构做了一些调整,以便我们构造二叉排序树。(差别请对比我的上个博客)。 因为我们在构造二叉排序树的时候,需要明确根的概念,所以需要新建一个类需要引用我们原有的TreeNode public class TreeNode { int val; TreeNode left; TreeNode right; public TreeNode(int x) { val = x; } public int getVal() { r原创 2020-05-30 22:20:42 · 219 阅读 · 0 评论 -
java二叉树的遍历(非递归)
二叉树作为一个重要的数据结构,我们在调用过程中需要掌它的遍历算法,加深我们对树的理解和栈、队列的应用。 下面是我定义的树的基本结构。 public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } 此图是该二叉树的结构 /** * 层次遍历 * @return */ public L原创 2020-05-26 17:36:30 · 354 阅读 · 0 评论 -
java 八大排序之一——归并排序
想到大家可能都对算法有一些胆怯心理,我也是在学长的帮助下,在优化排序的归并算法得到一些提升,并且更深的理解了java的方法以及一些数组的运用。 我们来简单的分析归并算法的过程,简单的说分为三步,其中包括有序数组的合并,数组的压缩,二维数组与一维数组的转换。 1.有序数组的合并(分别使用了for(参数无关),while) /** * 入参为两个从小到大的有序数组 * @param arr1 * @p...原创 2019-07-21 23:24:52 · 101 阅读 · 0 评论