![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
凌晨独舞
这个作者很懒,什么都没留下…
展开
-
算法打卡第一天:复杂度分析
大O大O时间复杂度表示代码随着数据规模增长的变化趋势注意点:只关注执行最多的一段代码加法法则:总复杂度等于量级最大的那段代码的时间复杂度乘法法则:嵌套的代码的复杂度等于嵌套内外代码复杂度的乘积常见的时间复杂度常量阶 O(1)指数阶 O(2的N次方)对数阶 O(logN) 阶乘阶 O(N!)线性阶 O(N)线性对数阶 O(N * logN)平方阶 O(N的2次方)立方...原创 2019-11-25 23:46:52 · 220 阅读 · 0 评论 -
查找算法-二分查找
概念二分查找的思路是很简单的,前提是这组数据是有顺序的。 思路是从中间找一个数,判断大小,如果数比中间数大,说明在中间数到结尾的数中,如果小于,则说明在开始和中间数之间,经过多次相同操作,就可以得到我们想查找的数时间复杂度时间复杂度就是 O(logn)代码实现非递归的实现 const testArr = [] let i = 0 while (i < 10...原创 2019-11-22 13:50:16 · 200 阅读 · 0 评论 -
排序算法(九):归并排序
概念递归将数组分为两个序列,有序合并这两个序列。归并排序的核心思想还是蛮简单的。如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。归并排序使用的就是分治思想。分治,顾名思义,就是分而治之,将一个大问题分解成小的子问题来解决。小的子问题解决了,大问题也就解决了图解[外链图片转存失败,源站可能有防盗链机制,...原创 2019-11-07 20:15:04 · 282 阅读 · 0 评论 -
排序算法(八):快速排序
概念快速排序又叫快排,思路是 在arr中找到一个点,从这点开始晓得都移动到前面,大的都移动到后面。然后把这两部分分别进行同样的操作。直到left 不小于right 的时候 说明所有的操作都进行完了代码const swap = (arr, i, j) => { const temp = arr[i] arr[i] = arr[j] arr[j] = temp}...原创 2019-11-07 19:50:46 · 206 阅读 · 0 评论 -
排序算法(七):希尔排序
概念这是一个叫希尔的人想到的,所以叫做希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。逻辑首先,选择增量 gap = 10/2 = 5 把所有的数分成5组,对每组进行排序缩小增量继续以 gap = gap/2 = 2 把所有的数分成2组,对每组进行排序通过这种方式,缩小这个数组的有序度,然后在对整个数组进行插入排序用这种方式减小复杂度...原创 2019-11-06 20:13:39 · 483 阅读 · 0 评论 -
排序算法(六):桶排序
概念桶排序:取 n 个桶,根据数组的最大值和最小值确认每个桶存放的数的区间,将数组元素插入到相应的桶里,最后再合并各个桶复杂度最好:O(n),每个数都在分布在一个桶里,这样就不用将数插入排序到桶里了(类似于计数排序以空间换时间)。最坏:O(n²),所有的数都分布在一个桶里。平均:O(n + k),k表示桶的个数。代码 // 桶算法 function bucket_so...原创 2019-11-04 15:24:31 · 262 阅读 · 0 评论 -
排序算法(五):基数排序
概念基数排序是非比较排序算法,算法的时间复杂度是O(n). 相比于快速排序的O(nlgn),从表面上看具有不小的优势.但事实上可能有些出入,因为基数排序的n可能具有比较大的系数K.因此在具体的应用中,应首先对这个排序函数的效率进行评估. 基数排序的主要思路是,将所有待比较数值(注意,必须是正整数)统一为同样的数位长度,数位较短的数前面补零. 然后, 从最低位开始, 依次进行一次稳定排序(我们常用...原创 2019-11-04 15:23:47 · 187 阅读 · 0 评论 -
排序算法(四):计数排序
概念以数组元素值为键,出现次数为值存进一个临时数组,最后再遍历这个临时数组还原回原数组。因为 JavaScript的数组下标是以字符串形式存储的,所以计数排序可以用来排列负数,但不可以排列小数。复杂度最好:O(n + k),k是最大值和最小值的差。最坏:O(n + k)平均:O(n + k)分类常规计数排序代码 function counting_sort(nums) {...原创 2019-11-04 15:22:54 · 569 阅读 · 1 评论 -
排序算法(三):选择排序
概念选择一个数和后面的所有数比较,确定现在位置的值时间复杂度最好:O(n²)最坏:O(n²)平均:O(n²)代码 function select_sort(arr) { let leg = arr.length for (let i = 0; i < leg; i++) { for (let j = i + 1; j <...原创 2019-11-04 15:19:44 · 135 阅读 · 0 评论 -
排序算法(二):插入排序
概念把数组分成两部分,一部分是有顺序的,第二部分是没有顺序的,从没有顺序的数组中拿出来一个,把他排在有序数组中的相应位置时间复杂度最好:O(n),原数组已经是升序的。最坏:O(n²)平均:O(n²)代码 // 插入算法 function insert_sort(arr) { let leg = arr.length for (let i = 1...原创 2019-11-04 15:18:38 · 127 阅读 · 0 评论 -
排序算法(一):冒泡排序
概念冒泡排序:就行冒泡泡一样,每次把最多大的或者最小的冒出来(找到),放在最后或者最前面,然后重复N次,就可以对数组进行排序,每次总是相邻两个作比较时间复杂度通过相邻元素的比较和交换,使得每一趟循环都能找到未有序数组的最大值或最小值。最好:O(n),只需要冒泡一次数组就有序了。最坏:O(n²)平均:O(n²)分类1. 单向冒泡2. 双向冒泡单向冒泡 functio...原创 2019-11-04 15:16:47 · 248 阅读 · 0 评论