趣谈编程

其他

什么是桶排序?

每一个桶(bucket)代表一个区间范围,里面可以承载一个或多个元素。桶排序的第一步,就是创建这些桶,确定每一个桶的区间范围:
2018年11月5日
其他

什么是计数排序?

非常简单,让我们遍历这个无序的随机数列,每一个整数按照其值对号入座,对应数组下标的元素进行加1操作。
2018年10月19日
其他

Hash冲突之开放地址法

答案是可以的,我们可以再弄另外一个Hash函数,对落在同一个位置的关键字进行再次的Hash,探测的时候就用依赖这个Hash值去探测,比如我们可以使用下面的函数:
2018年10月8日
其他

什么是HashMap?

众所周知,HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry。这些个键值对(Entry)分散存储在一个数组当中,这个数组就是HashMap的主干。
2018年4月16日
其他

希尔排序

可以看出,他是按下标相隔距离为4分的组,也就是说把下标相差4的分到一组,比如这个例子中a[0]与a[4]是一组、a[1]与a[5]是一组...,这里的差值(距离)被称为增量
2018年4月13日
其他

快速排序(基础版)

快排之所以块,就是因为它高度优化的内部循环(分割),它既不像归并那样需要辅助数组来回复制元素,也不像堆排序无法利用缓存并且有许多无用的比较,并且最坏情况可以采用一些方法避免
2018年3月30日
其他

归并排序

归并排序是建立在归并操作的一种高效的排序方法,该方法采用了分治的思想,比较适用于处理较大规模的数据,但比较耗内存,今天我们聊聊归并排序
2018年3月16日
其他

选择排序

同理,在剩下的无序区间选择最小的元素,将最小元素与无序区间的第一个元素进行交换,交换后原来无序区间的第一个元素就变为有序区间的最后一个元素了,有序区间递增一
2018年3月7日
其他

直接插入排序

然后我用for循环从前到后遍历整个数组,将无序元素一个一个地插入到正确的位置(排好序的位置),第一个元素我认为它是排好序的,所以我从第二个元素开始遍历
2018年2月8日
其他

算法分析神器—时间复杂度

每循环一次,sum就给自身乘以2,乘了多少次就跳出循环了呢(大于等于n)?不知道,就设为x吧,那么2^x=n,解出x=logn,这说明随着n的增大,最消耗时间的内层语句是呈指数变化的
2018年1月14日
其他

堆排序

如果将这个数组调整为小根堆,那么根据小根堆堆顶一直是最小元素的特性,我可以不断地取(删除)堆顶的元素,直到堆中只剩下一个元素,这样就可以得到一个递减的元素序列了
2017年12月24日
其他

可以管理时间的二叉堆

你可以做优先级最高的事情,做完后删除它,然后做剩下优先级最高的事,当然,很有可能有其他事插入进来,新插入的事情如果优先级不是最高,就不做,这样你就一直做优先级最高的事了
2017年12月12日
其他

二分查找

老师给的数字是升序的,所以没有必要一个一个比较,可以逐渐缩小要查找的范围来查找,我先看中间的元素,如果是15,那就直接找到了,如果比15比中间的元素大,那就应该去中间元素的右边去找,反之在左边找
2017年11月24日
其他

冒泡排序

“所谓稳定性,其实就是说,当你原来待排的元素中间有相同的元素,在没有排序之前它们之间有先后顺序,在排完后它们之间的先后顺序不变,我们就称这个算法是稳定的”,克说道,顺便画了一个图举了一个例子
2017年11月15日
其他

神速Hash

“这里的数组就扩大了近两倍,由于要大小要选素数,那就选原数组大小两倍后的第一个素数7,旧Hash表和新Hash表采用了不同的Hash函数,但相关,只是m的取值变了”李大臣解释道
2017年11月9日
其他

神速Hash

“只需要知道起始位置和下标值就可以了,不管数组中有多少个元素,都可以一次访问到,这正是因为起始位置和下标值组成了元素的存储位置,从这个存储位置就可以直接找到元素”,王大臣自问自答起来
2017年10月31日