数据结构与算法
anickname
专注大数据技术
展开
-
Java语言实现LRU(最少最近使用)缓存淘汰算法
LRU(least recently use)最少最近使用算法,是缓存淘汰中常用的算法,实际使用要求是:1.把最常使用的放前面,不常使用的放后面,至于这里的前面和后面会在后面说到。2.要求存取的时间复杂度是O(1)。3.存数据的时候,如果容量已满,则去除最后不常使用的数据,再把新数据插入,插入的数据位于前面。如果有该数据则移动到前面。4.取数据的时候,没有则返回-1,有则返回该数据,并将该数据放在前面。这里借助hash表和双链表来实现,因为要求时间复杂度是常数级,所以使用hash表存取.原创 2021-05-27 17:20:32 · 503 阅读 · 0 评论 -
经典排序算法之--插入排序
插入排序是一种稳定的排序算法,它的思路是: 假定一个已经有序的序列,向这个序列中插入一个元素,使得加入这个元素后的序列整体有序。下面是插入排序的核心代码:for(int i=1;i<a.length;i++){//循环次数 for(int j=i-1;j>=0;j--){//比较次数 if(a[j+1]<...原创 2018-08-03 22:55:34 · 620 阅读 · 0 评论 -
经典排序算法之--冒泡排序
int[] a={5,7,3,2,4,9,6};对于上面的一个数组,冒泡排序的原理是: 依次比较相邻元素的大小,前一个元素若比后一个元素大,则交换两个元素的位置,给人的感觉是大的元素像气泡一样往上冒,也可以把小的元素往上冒。比较过程如下(最大值向上冒):数组初始状态:{5,7,3,2,4,9,6}第一次比较后:{5,7,3,2,4,9,6},5不比7大不交换位置...原创 2018-07-31 11:57:28 · 255 阅读 · 0 评论 -
经典排序算法之--选择排序
了解了前两种排序算法,再来看选择排序已经很简单了,它的思路是: 从一堆序列中,选择一个最小的数,作为新的有序序列的头,剩下的元素依次重复这一过程。核心代码如下: for(int i=0;i<a.length;i++){ int minIndex=i; for(int j=i+1;j<a.length;...原创 2018-08-06 14:14:21 · 129 阅读 · 0 评论 -
经典排序算法之--快速排序
快速排序是一种高效但不稳的排序算法,不稳性取决于比较基数的选择带有随机性,其排序原理百度百科如下:设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。...原创 2018-08-22 14:14:12 · 168 阅读 · 0 评论