![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
g3230863
这个作者很懒,什么都没留下…
展开
-
策略+工厂,策略+模板+工厂
策略,工厂,模板原创 2021-09-08 16:38:49 · 78 阅读 · 0 评论 -
队列的实现(循环队列Disruptor)
队列原创 2022-06-21 15:03:33 · 342 阅读 · 0 评论 -
KMP算法
KMP算法核心next数组,根据数组位置来回退到对应的位置,提高效率abcababcabc对应子串公共前后缀长度为子串前缀2后缀公共前后缀的最长长度a无无0abab0abca,abbc,c0abcaa,ab,abca,ca,bca1abcaba,ab,abc,abcab,ab,cab,bcab2…………next 数组的值是除当前字符外(注意不包括当前字符)的公共前后缀最长长度,将表中公共前后缀最长长度全部右原创 2022-05-25 21:44:53 · 78 阅读 · 0 评论 -
计数排序算法
核心思想:桶排序适用于:数据量大,但是数据的范围小的情况第一版import java.util.Arrays;/** * @description: 计数排序,复杂度为O(n+k)的稳定的排序算法,k是待排序列最大值 * 可以参考https://www.cnblogs.com/xiaochuan94/p/11198610.html * @create: 2021-04-04 20:05 **/public class CountSort { /** * 计数排序适原创 2022-03-29 19:09:47 · 812 阅读 · 0 评论 -
归并排序算法
归并排序是基于分治的思想,是稳定排序分(divide)的阶段:分成一些小的问题然后递归求解,时间复杂度为O(log2n)治(conquer)的阶段:则将分的阶段得到的各答案"合并"在一起,时间复杂度为cn)总的平均时间复杂度为O(nlogn)。而且,归并排序的最好,最坏,平均时间复杂度均为O(nlogn)。递归 * long f(int n){ * if(n=1){ * return 1; * } * .原创 2022-03-19 20:56:07 · 603 阅读 · 0 评论 -
数据结构可视化
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html原创 2021-06-07 22:34:37 · 80 阅读 · 0 评论 -
二叉树按层打印,求最大的宽度
一.按层打印,从左到右分层打印 public static void level(Node node) { if (node != null) { Queue<Node> queue = new LinkedList<Node>(); queue.add(node); while (!queue.isEmpty()) { Node n=queue.poll原创 2021-05-24 23:04:30 · 93 阅读 · 0 评论 -
双轴快排
荷兰国旗问题双插入排序原创 2021-04-06 23:58:41 · 243 阅读 · 0 评论 -
快速排序算法
原理: 快速排序的本质就是把基准数大的都放在基准数的右边, 把比基准数小的放在基准数的左边,这样就找到了该数据在数组中的正确位置 时间复杂度: 最好的情况是O(N*logN) 最坏的情况是O(N2),最左边或者最右边是边缘的数,即最大(1,2,3,4,5)或者最小(5,4,3,2,1)的, 因为每次分成两个区间时,只能确定一个数的位置 避免出现O(N2)为了避免已经排好序的这种情况,可以随机取一个位置的数与数组最后一个数做交换在来排序 下面是选取左边的数为基准原创 2021-04-05 00:21:07 · 350 阅读 · 1 评论 -
希尔排序
public class Shell { public static void main(String[] args) { int[] arr={9,8,7,4,5,6,1,3,2}; Shell_Sort(arr); System.out.print(Arrays.toString(arr)); System.out.println(); } public static void Shell_Sort(int[原创 2021-04-01 15:32:16 · 72 阅读 · 0 评论 -
算法-对数器
验证手写的算法是否正确import java.util.Arrays;import java.util.Random;public class DataChecker { public static void main(String[] args) { int[] arr =newArr(10,1000); int[] arr1 = Arrays.copyOf(arr, arr.length); System.out.println("原创 2021-03-30 20:52:25 · 60 阅读 · 0 评论 -
插入排序算法
前面的数比要插入的数值大,就往后移动。j >=0&& arr[j]>tmp 这个条件来控制内循环,保证插入的位置正确import java.util.Arrays;public class insert { public static void main(String[] args) { int[] arr={9,8,7,4,5,6,1,3,2}; sort(arr); } public static void原创 2021-03-29 23:46:32 · 56 阅读 · 0 评论 -
冒泡排序
第一版找出每个位置的最大值,便于理解import java.util.Arrays;/** * @description: 冒泡排序 * @author: xt * @create: 2021-03-29 21:15 **/public class bubble { public static void main(String[] args) { int[] arr={9,8,7,4,5,6,1,3,2}; //倒叙找到每个位置上最大的值原创 2021-03-29 22:40:13 · 59 阅读 · 0 评论 -
选择排序
1.基础版,把最小的放到最左边,这个需要8次public class selection { public static void main(String[] args) { int[] arr = {5, 3, 6, 8, 1, 7, 9, 4, 2}; for (int i = 0; i < arr.length - 1; i++) { int minPos = i; for (int j = i +原创 2021-03-29 18:57:55 · 57 阅读 · 0 评论