随笔分类 - 思考、算法
摘要:**基数排序** 核心思想: 对排序数据进行个位、十位、百位...的拆分(类似于桶排序的分组),先对个位比较排序,排完后再对十位比较排序,直到比较的位数大于最大值时,返回结果。 let arr = [1,-8,6,-50,34,15,-12,42,48,30,11]; let arrMin = Ma
阅读全文
摘要:**计数排序**核心思想: 找到数组中的最大数和最小数来确定生成数组的大小,根据数组值找到到数组下标与值相同的位置+1,来标识当前值有几个,最后遍历当前数组。 let arr = [1,8,6,50,34,15,12,42,48,30,11];//数组 let arrMin = Math.min(.
阅读全文
摘要:**桶排序** 核心思想:对数据进行分桶(分组),分桶后对桶中数据进行排序(可以使用自己喜欢的方式),然后再将所有桶合并(数组合并)。 公式: 划分桶的数量 (数组中最大值-最小值)/数组长度+1 数据所属哪个桶 (数组中当前值-数组中最小值)/数组长度 let arr = [1,8,6,50,34
阅读全文
摘要:**堆排序** 堆排序可以理解为二叉树形式的排序,对于二叉树,根节点一定是最大值或者最小值,由此对数据进行堆排序每一轮可以确定一个最大值和最小值。在对剩下的树进行排序,只到最终剩下一个。结束 针对堆排序(完全二叉树)需要知道以下几点: 最后一个非叶子节点的下标为:数组长度/2-1; 非叶子节点的左子
阅读全文
摘要:**希尔排序** 对数组按照某一特定增量进行直接插入排序,逐渐减少增量,当增量为1时,进行最后一次直接插入排序,最终得到结果。 以下方数据为例,这里会讲解希尔排序的具体步骤。 function dd(arr_){ let flag = Math.floor(arr_.length/2);//增量 w
阅读全文
摘要:**选择排序** 选择排序每次都会获得最大或者最小元素的下标,每次遍历结束替换下标元素的位置,获得一个最值,他不需要像冒泡排序一样,每一次的遍历需要进行多次交换 let arr = [8,9,1,7,2,3,5,4,6,0]; for(let i = 0;i < arr.length;i++){ l
阅读全文
摘要:**冒泡排序** 冒泡排序按照一定的遍历规则(从小到大、从大到小),对数据进行遍历,每一轮遍历结束会确定一个最大值或者最小值,在对剩下的数据再次进行重复操作,直到最后剩余一个元素。 let arr = [8,9,1,7,2,3,5,4,6,0]; for(let i = 0;i < arr.leng
阅读全文
摘要:**插入排序** 插入排序主要是将需要排序的数组分为两部分,取第一个元素作为已排序数组,其余元素作为未排序数组,依次取未排序数组的元素和已排序数组中的元素进行对比插入,最终未排序数组变为空值,已排序数组就是排序结果 let arr = [8,9,1,7,2,3,5,4,6,0]; for (var
阅读全文
摘要:一根高筋拉面,中间切一刀,可以得到2根面条。 如果先对折1次,中间切一刀,可以得到3根面条。 如果连续对折2次,中间切一刀,可以得到5根面条。 那么,连续对折10次,中间切一刀,会得到多少面条呢? 思考: 1. 0次对折,2根面条 2的0次方+1 2.1次对折,3根面条 2的1次方+1 3.2次对折
阅读全文