算法
GodTheTang
做一个爱程序的程序员
展开
-
【图文详解】常用的限流算法—漏桶、令牌桶
令牌桶算法 对于很多应用场景来说,除了要求能够限制数据的平均传输速率外,还要求允许某种程度的突发传输。这时候漏桶算法可能就不合适了,令牌桶算法更为适合初始化限流器时,会初始化一定量的令牌,假设初始化10个令牌,每隔一段时间生成令牌,客户端发请求,被限流器拦截,查询是否有令牌为什么采用令牌桶,因为秒杀的那一刻,希望处理比较多的请求,短期处理突发一大波流量,并不会长期处理一大波请求在“令牌桶算法”中,只要令牌桶中存在令牌,那么就允许突发地传输数据直到达到用户配置的门限,所以它适合.原创 2021-11-12 18:33:26 · 1477 阅读 · 0 评论 -
十大经典排序算法—基数排序
1、算法思想:一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数2、动图演示(图片来源菜鸟教程)代码实现:public class RadixSort { public static void main(String[] args) { int[] arr = {22, 34, 3, 32, 82, 55, 89, 50, 37..原创 2021-11-11 19:25:22 · 89 阅读 · 0 评论 -
十大经典排序算法—桶排序
1、算法思想:桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效,我们需要做到这两点:在额外空间充足的情况下,尽量增大桶的数量 使用的映射函数能够将输入的 N 个数据均匀的分配到 K 个桶中2、图片演示(图片来源菜鸟教程)元素分布在桶中:元素在每个桶中排序代码实现:public class BucketSort { private static final InsertSort insert...原创 2021-11-09 19:29:54 · 582 阅读 · 0 评论 -
十大经典排序算法—计数排序
1、算法思想:第一步:找出待排序的数组中最大和最小的元素第二步:统计数组中每个值为i的元素出现的次数第三步:对所有的计数累加第四步:反向填充目标数组2、动图演示(动图来源菜鸟教程)代码实现:public class CountingSort { public static void main(String[] args) { int[] arr = {22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, .原创 2021-11-08 18:09:10 · 152 阅读 · 0 评论 -
十大经典排序算法—堆排序
1、算法思想:第一步:创建一个堆第二步:把堆首与堆尾互换第三步:把堆的尺寸缩小1,目的是把新的数组顶端数据调整到相应位置第四步:重复第二步,直到堆的尺寸为12、动图演示(动图来源菜鸟教程)代码实现:public class HeapSort { public static void main(String[] args) { int[] arr = {22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9.原创 2021-11-05 19:37:43 · 131 阅读 · 0 评论 -
十大经典排序算法—快速排序
1、算法思想:第一步:以左边第一个数为哨兵,从右边一直走找到第一个比哨兵小的数,从左边一直走找到第一个比哨兵大的数,交换第二步:当大数的索引比小数的索引大时,将小数与左边的哨兵交换,这时左边的数都比哨兵小,右边的数都比哨兵大第三步:重复第一步第二步,递归哨兵左右两边的数组2、动图演示(动图来源菜鸟教程)代码实现:public class QuickSort { public static void main(String[] args) { int[原创 2021-11-04 20:57:56 · 260 阅读 · 0 评论 -
十大经典排序算法—归并排序
1、算法思想:第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置第四步:重复第三步,直到某一指针达到序列尾第五步:将另一序列剩下的所有元素直接复制到合并序列尾2、动图演示(动图来源菜鸟教程)代码实现:public class MergeSort { public static void m.原创 2021-11-03 19:56:28 · 218 阅读 · 0 评论 -
十大经典排序算法—希尔排序
1、算法思想:第一步:将待排序序列分割成若干个子序列第二步:对若干个子序列分别进行直接插入排序,待整个序列中的记录基本有序时第三步:再对全体记录进行依次插入排序2、动图演示(动图来源菜鸟教程)代码实现:public class shellSort { public static void main(String[] args) { int[] arr = {22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35,.原创 2021-11-03 19:50:38 · 174 阅读 · 0 评论 -
十大经典排序算法—插入排序
1、算法思想:原创 2021-11-03 18:38:34 · 148 阅读 · 0 评论 -
十大经典排序算法—选择排序
1、算法思想:第一步:在未排序的序列中找到最小(大)的数,放到排序序列的起始位置第二步:再从剩下未排序的序列中找最小(大)的数,放到已经排序序列的最后位置第三步:重复第二步即可,直到完成所有排序2、动图演示(动图来源菜鸟教程)代码实现:public class SelectSort { public static void main(String[] args) { int[] arr = {22, 34, 3, 32, 82, 55, 89, 50,原创 2021-11-02 20:10:12 · 232 阅读 · 0 评论 -
十大经典排序算法—冒泡排序
1、算法思想:第一步:比较相邻的元素,如果第一个比第二个大,就交换他们两个。第二步:对每一对相邻元素作同样的工作,直到数组最后两个数进行比较,最后的元素是最大的数第三步:针对所有的元素重复以上的步骤,除了最后一个(第二步中得到的最大元素)。第四步:持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。2、动图演示3、什么时候最快?当输入的数据已经是正序时4、什么时候最慢?当输入的数据是反序时(直接一个for反序输出即可)代码实现:...原创 2021-10-28 20:42:17 · 253 阅读 · 0 评论