算法与数据结构
大嘴猴�
这个作者很懒,什么都没留下…
展开
-
求大于等于(小于等于)一个整数最小2次幂算法
给一个整数,如何求得大于等于该整数的最小2次幂呢?最近看ConcurrentHashMap的源码中有这么一段代码,这段代码就是解决这个问题的最好答案。现在我给大家来讲解一下这段代码的意思吧。/** * Returns a power of two table size for the given desired capacity. * See Hackers Delight, sec 3.2 */ private static final int tableSize原创 2020-10-15 16:08:09 · 1631 阅读 · 1 评论 -
快速理解HashMap(哈希表)
一、哈希表哈希表可以简单理解为存储Key-Value(键值对)映射的集合,我们可以通过Key快速找到对应的Value,在jdk1.8(今天只聊jdk1.8)中哈希表采用了数组+链表+红黑树的方式来实现。这是我从网上找的一张图片,先简单大家先直接看图片有个印象,对着图片看以至于不会太抽象。这时可能会有疑惑,哈希表是怎么实现的,为什么搜索效率高,他又用到了那些原理,我们应该怎样使用呢?接下来容我一一道来。二、哈希函数哈希函数我们可以简单理解为一种数据映射的算法,当我们要存入数据的时候我们并不是直接将原创 2020-10-08 07:09:49 · 891 阅读 · 1 评论 -
排序(四) : 快速排序Ⅱ(填坑法+递归)
快速排序(填坑法+递归)上次已经介绍过快速排序的基本思想所以这次不做赘述。其实基本思想一致只是实现稍有不同而。原数组:挖坑 : 去除left的值作为key填坑 : 因为3<4(key) arr[left] = arr[right];继续填坑 : 因为8>4(key) arr[right] = arr[left];相遇这是一次操作,然后将3设为基准值(key)重复此操作直至数组有序。public static void quickSort(int[] arr,int原创 2020-08-30 21:50:57 · 220 阅读 · 0 评论 -
排序(三) : 快速排序Ⅰ(Hoare法+递归)
快速排序1.原理 :①. 从待排序区间选择一个数,作为基准值(pivot);②. Partition: 遍历整个待排序区间,将比基准值小的(可以包含相等的)放到基准值的左边,将比基准值大的(可以包含相等的)放到基准值的右边;③. 采用分治思想,对左右两个小区间按照同样的方式处理,直到小区间的长度 == 1,代表已经有序,或者小区间的长度0,代表没有数据。...原创 2020-08-22 18:54:18 · 265 阅读 · 0 评论 -
排序(二):希尔排序,堆排序
本次介绍:希尔排序,堆排序(并解决topK问题)一、希尔排序1.原理 : 希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定一个整数,把待排序文件中所有记录分成个组,所有距离为的记录分在同一组内,并对每一组内的记录进行排序。然后,取,重复上述分组和排序的工作。当到达=1时,所有记录在统一组内排好序。① 希尔排序是对直接插入排序的优化。② 当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。我们原创 2020-08-16 17:57:51 · 905 阅读 · 0 评论 -
排序(一):冒泡排序,插入排序,选择排序
本次介绍 : 冒泡排序,插入排序,选择排序一、冒泡排序1.原理 : 在无序区间,通过相邻数的比较,将最大的数冒泡到无序区间的最后,持续这个过程,直到数组整体有序。2.实现(升序):public static void bubbleSort(int[] array) { for(int i = 0;i < array.length; i++){ for(int j = 0;j < array.length - i - 1; j++){ if(array[j] > arra原创 2020-08-16 00:02:11 · 175 阅读 · 0 评论