摘要: 概述: 所谓排序算法,即通过特定的算法因式将一组或多组数据按照既定模式进行重新排序。 说明: 稳定 :如果a原本在b前面,而a=b,排序之后a仍然在b的前面; 不稳定 :如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面; 内排序 :所有排序操作都在内存中完成; 外排序 :由于数据太大, 阅读全文
posted @ 2020-03-16 16:42 七度丢失的梦 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 基数排序的排序思路是这样的:先以个位数的大小来对数据进行排序,接着以十位数的大小来多数进行排序,接着以百位数的大小…… 排到最后,就是一组有序的元素了。不过,他在以某位数进行排序的时候,是用“桶”来排序的。 由于某位数(个位/十位….,不是一整个数)的大小范围为0-9,所以我们需要10个桶,然后把具 阅读全文
posted @ 2020-03-16 16:39 七度丢失的梦 阅读(511) 评论(0) 推荐(0) 编辑
摘要: 桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效,我们需要做到这两点: 在额外空间充足的情况下,尽量增大桶的数量 使用的映射函数能够将输入的N个数据均匀的分配到K个桶中 同时,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要 阅读全文
posted @ 2020-03-16 16:07 七度丢失的梦 阅读(740) 评论(0) 推荐(0) 编辑
摘要: 计数排序就是简单的桶排序,一个桶代表数组中一个数出现的个数,所以需要一个和数组数字范围一样大的辅助数组,一般用在范围小于100的排序,时间复杂度为O(n),空间复杂度为数组的数字范围。 Array.prototype.countSort = function() { let len = this.l 阅读全文
posted @ 2020-03-16 15:45 七度丢失的梦 阅读(779) 评论(0) 推荐(0) 编辑
摘要: 堆排序主要分为两个步骤: 1.建堆-重建堆 堆实质上是完全二叉树,必须满足:树中任一非叶子结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。 堆分为:大根堆和小根堆,升序排序采用大根堆,降序排序采用小根堆。 如果是大根堆,则通过调整函数将值最大的节点调整至堆根。 2.将堆根保存于尾部 阅读全文
posted @ 2020-03-16 13:36 七度丢失的梦 阅读(391) 评论(0) 推荐(0) 编辑
摘要: 归并操作(merge),也叫归并算法,指的是将两个顺序序列合并成一个顺序序列的方法。 如 设有数列{6,202,100,301,38,8,1} 初始状态:6,202,100,301,38,8,1 第一次归并后:{6,202},{100,301},{8,38},{1},比较次数:3; 第二次归并后:{ 阅读全文
posted @ 2020-03-16 11:52 七度丢失的梦 阅读(410) 评论(0) 推荐(0) 编辑
摘要: 希尔排序是希尔(Donald Shell) 于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。 先 阅读全文
posted @ 2020-03-16 01:36 七度丢失的梦 阅读(241) 评论(0) 推荐(0) 编辑