
算法实现
文章平均质量分 52
Mr. 阿紫
关注我,阿紫陪你一起成为大牛
展开
-
平衡二叉树ALVBinaryTreeList
简介:本文介绍平衡二叉树基本概念,并通过继承AbstractBinaryTree抽象类,java实现ALVBinaryTreeList,主要操作算法有插入和删除。 一、平衡二叉树基本概念 1.平衡二叉树是什么? 平衡二叉树时一种结构平衡的二叉树,即叶节点高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 2.为什么会出现平衡二叉树? 1)二叉树插入时存在最坏情况,导致查找的时间复杂度为O(n)。例如:顺序插入1,2,3,...,时,二叉树严重失衡,退化为普通链表,查找时间复杂.原创 2021-12-23 18:31:28 · 977 阅读 · 0 评论 -
二叉树BinaryTreeList
本文介绍二叉树基本概念,并通过继承java集合List接口,java实现BinaryTreeList操作算法:插入、删除、前中后层次遍历、二叉树深度、最大小宽度等。原创 2021-12-22 18:26:51 · 558 阅读 · 0 评论 -
归并排序以及Tim排序
递归概念:方法自己调用自己。注意需要有返回条件,basecase。 归并排序:递归+合并。是分治思想的实践,在递归基础上的一种排序算法。稳定,速度仅次于快速排序。 归并排序思想: 分解(Divide):将n个元素分成个含n/2个元素的子序列。 解决(Conquer):用合并排序法对两个子序列递归的排序。 合并(Combine):合并两个已排序的子序列已得到排序结果。 默认的merge static void merge(){ int[] arr = {1,4,7,8,原创 2021-08-27 21:20:26 · 407 阅读 · 0 评论 -
插入排序优化算法
选择排序、冒泡排序、插入排序区别: 选择排序,每次选择最大/小值放到前面合适位置,每轮内层循环交换一次。排好的子数组有序。 冒泡排序,每次两两比较都交换,将最大/小值交换到子数组位置。排好子数组有序。 插入排序,每次插入后子数组都有序,且不是根据最大/最小值排序。 思路 :前i个数字有序,第i+1个数字和前面i个数字依次比较并交换顺序插入到前i个数字合适。和最小值冒泡排序有点像。 代码思路:从第二个位置开始,和前面有序数字两两比较交换。但是优化后的插入排序,只需要交换1次。 时空复杂度:平原创 2021-08-22 19:09:17 · 531 阅读 · 0 评论 -
冒泡排序优化算法
和选择排序区别:冒泡排序两两比较大小后都会交换,而选择排序仅仅记录最值的下标,一轮结束后再交换值。 思路:重复找子数组中最大数,每次比较后都会交换最大数,最大数逐渐冒泡到顶部。 代码思路:数组内值两两比较,符合条件后交换,再用同样的方法作用于子数组。 方法1: 平均时间复杂度:O(n ^ 2),最好、最坏时间复杂度:O(n ^ 2),两两交换,稳定 private void bubbleSort() { int[] arrayRandom = new int[100];原创 2021-08-22 19:14:04 · 211 阅读 · 0 评论 -
选择排序算法优化
1.默认选择排序算法实现 思路:记录最小数下标,重复一轮后,调换最小位置和前面位置,重复此过程。 private void selectSort(){ int[] array = {5,4,3,7,8,2,1,9,6}; for (int i = 0;i<array.length - 1;i++){//边界处理 int minPos = i; for (int index = i+1;index <原创 2021-08-18 15:32:16 · 642 阅读 · 0 评论 -
验证排序算法是否稳定
思路:两个连续数字存储在数组中,内存地址是递增的,只需判断两个相同数字内存地址是否还是递增即可。 具体方案:需要自定义MyInteger对象,因为对象才可获取内存地址。此外,获取对象内存地址,需要引入jol-core依赖包。 代码示例: private boolean isStable(){ MyInteger[] array = new MyInteger[]{new MyInteger(2),new MyInteger(2),new MyInteger(2)};原创 2021-08-22 19:11:17 · 281 阅读 · 0 评论 -
数据结构与算法基本概念
介绍数据结构和算法的背景,以及两者的关系原创 2021-08-22 19:17:57 · 188 阅读 · 0 评论