算法学习笔记
记录自己学习的算法
花轮2580
大数据工程师
展开
-
BST二叉查找树
踏踏实实积累,不要浮躁!!!思想:利用二叉树来存储散列表中的值,提供高效的put get 操作说明:下面的代码只是帮助理解散列表的工作原理,工程上一般都是用红黑树来实现平衡的二叉排序树put 操作内部利用的是get 操作,如果能查找到则更新该节点的value值,如果没有找到根据大小关系在下面插入该节点package search;import edu.princeton.cs...原创 2019-01-27 19:29:34 · 178 阅读 · 0 评论 -
堆排序heapSort
踏踏实实积累,不要浮躁,在学习上是糊弄不过去的!!大根堆定义:父节点都大于等于它的子节点(递归定义下去)堆排序思想: 本质上还是在数组上的比较和交换操作流程如下:1:构造大根堆从下往上构造只需要扫描一半的元素因为n/2 -> n这段区间内的元素是叶子节点不会参与2:排序,将堆顶元素跟数组中最后一个元素交换然后再进行sink()操作调整堆package sort;im...原创 2019-01-27 17:42:36 · 122 阅读 · 0 评论 -
优先队列
踏踏实实积累,不要浮躁(1):适用场景许多应用程序都需要处理有序的元素,但不一定要求他们全部有序,或者是不一定要一次将他们排序。很多情况下我们会收集一些元素,处理当前键值的最大值,然后再收集更多的元素再处理当前键值的最大元素在任务调度中很适用,还有在图的搜索算法和一些数据压缩算法都能用到优先队列(2):思想利用数组来存放元素(下标0位置不存放元素),k,2k,2k+1分别是完全二叉树中...原创 2019-01-27 11:36:34 · 143 阅读 · 0 评论 -
快速排序
踏踏实实积累,不要浮躁 (1):快排应该是工程上使用最多的一种算法了,时间复杂度O(nlogn) 不稳定,原地的排序算法思想:利用递归依次找到数组最后一个元素在排序后的位置,package sort;import edu.princeton.cs.algs4.StdRandom;import tools.Util;public class quickSort { ...原创 2019-01-26 21:03:15 · 256 阅读 · 2 评论 -
mergeSort
踏踏实实积累,不要浮躁 今天介绍归并排序,时间复杂度为O(nlogn) 稳定的 算法思想:利用递的思想,分别sort左边和右边然后进行merge来合并有序数据,思想很简单代码实现还是有很多需要注意的点public static void sort(int[] arr,int low,int high){ if(high <= low){ // 注意 ...原创 2019-01-26 19:45:14 · 200 阅读 · 0 评论 -
BinartSearch
算法的第一篇,记录自己学习算法过程中遇到的坑!!! public class BinarySearch { public static int rank(int key,int[] arr){ int low = 0; int high = arr.length - 1; int mid = (high - low)/2 + lo...原创 2019-01-23 21:45:00 · 275 阅读 · 0 评论 -
插入排序和希尔排序小结
记录自己学习插入排序和希尔排序的过程督促自己养成输出内容的习惯!!!下面是两种基础的排序算法,本质上都是比较和交换 关键在于思想 (1):插入排序 public static void sort2(int[] arr){ // i 定位要插入的元素 int tmp; for(int i=1;i<arr.length;...原创 2019-01-26 18:08:44 · 130 阅读 · 0 评论