数据结构与算法
数据结构与算法的自我总结
hqgordon
这个作者很懒,什么都没留下…
展开
-
对于递归理解+归并+TimSort
递归 方法中调用自身方法 static long f(int n){ if(n<1) return -1; if (n==1) return 1; return n+f(n-1); //一个简单的递归 返回1+2+3....+n 关键:截止条件 归并排序 思想:分而治之 TimSort 来自:https://www.cnblogs.com/sunshuyi/p/12680918.html java将timsort用于对象数组排序 在非随机数组上是战胜了快排的 当Timsort运行在部分排原创 2021-04-16 11:19:03 · 100 阅读 · 0 评论 -
希尔排序与插入排序理解
希尔 首先我们知道,插入排序在基本有序时是效率极高的,并且插入排序一大浪费就是交换次数太多,使用希尔可以大大减少交换次数,快速达到基本有序。 其实到最后间隔为1,就是一次快速排序。 这样可以达到加速的效果。 n=nums.lenth 一般我们选择Knuth序列 h=1 h=3*h+1 1 4 13… package com.Gordon; public class ShellSort { public static void sort(int[] arr){ int len=arr原创 2021-04-16 10:00:00 · 100 阅读 · 0 评论 -
插入排序思想JAVA实现以及优化
思想 n= nums.length 就像打扑克摸牌,我们摸一张就插入到它相应的位置,但是注意,我们数组的插入往往伴随着不止一个数的移动!例如:我们要把4,6,3要把3插入到相应位置,是把3与6换位置,再与4换位置才能实现。 明显,插入排序从第二个数开始比较(有点像 往前的冒泡?),逆序则交换。 package com.Gordon; public class InsertionSort { public static void InsertionSort(int[] arr){ f原创 2021-04-15 10:45:19 · 86 阅读 · 0 评论 -
冒泡排序JAVA实现
思想 n=nums.length 第一次循环:我们从nums[0]开始往后遍历如果逆序执行交换 ,最后得到的就是:0到n-1的位置上最大的数一定被我们放在了最后一个位置。 第二次循环:我们只用循环到n-2了,因为最大数一定已经被我们放在最后一个位置了。 package com.Gordon; //冒泡排序 从开头一直两两比较 逆序交换 保证最大值一定能到最后 public class BubbleSort { public static void BubbleSort(int[] arr){原创 2021-04-15 10:23:10 · 83 阅读 · 0 评论 -
选择排序JAVA实现以及优化思考
选择排序思想 数组长度 n = nums.length 第一次从0开始找到数组最小值与nums[0]交换 第二次从1开始找到最小值与nums[1]交换 . . . 第n-2次 把最小值与nums[n-2]交换 package com.Gordon; public class SelectionSort { public static void main(String args[]){ int[] arr = {0,5,2,3,4,12,52,14,1,99}; //P原创 2021-04-15 09:42:57 · 66 阅读 · 0 评论 -
leetcode208. 实现 Trie (前缀树)
前缀树 前缀树(trie)是什么? Trie 是一颗非典型的多叉树模型,多叉即每个结点的分支数量可能为多个。 字典树(前缀树) Trie,又称前缀树或字典树,是一棵有根树,其每个节点包含以下字段: 指向子节点的指针数组 children。对于本题而言,数组长度为 2626,即小写英文字母的数量。此时 children[0] 对应小写字母 a,children[1] 对应小写字母 b,…,children[25] 对应小写字母 z。 布尔字段isEnd,表示该节点是否为字符串的结尾。 插入字原创 2021-04-14 21:20:34 · 162 阅读 · 0 评论