随笔分类 -  排序算法

十大排序算法
摘要:概述: 所谓排序算法,即通过特定的算法因式将一组或多组数据按照既定模式进行重新排序。 说明: 稳定 :如果a原本在b前面,而a=b,排序之后a仍然在b的前面; 不稳定 :如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面; 内排序 :所有排序操作都在内存中完成; 外排序 :由于数据太大, 阅读全文
posted @ 2020-03-16 16:42 七度丢失的梦 阅读(209) 评论(0) 推荐(0)
摘要:基数排序的排序思路是这样的:先以个位数的大小来对数据进行排序,接着以十位数的大小来多数进行排序,接着以百位数的大小…… 排到最后,就是一组有序的元素了。不过,他在以某位数进行排序的时候,是用“桶”来排序的。 由于某位数(个位/十位….,不是一整个数)的大小范围为0-9,所以我们需要10个桶,然后把具 阅读全文
posted @ 2020-03-16 16:39 七度丢失的梦 阅读(529) 评论(0) 推荐(0)
摘要:桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效,我们需要做到这两点: 在额外空间充足的情况下,尽量增大桶的数量 使用的映射函数能够将输入的N个数据均匀的分配到K个桶中 同时,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要 阅读全文
posted @ 2020-03-16 16:07 七度丢失的梦 阅读(762) 评论(0) 推荐(0)
摘要:计数排序就是简单的桶排序,一个桶代表数组中一个数出现的个数,所以需要一个和数组数字范围一样大的辅助数组,一般用在范围小于100的排序,时间复杂度为O(n),空间复杂度为数组的数字范围。 Array.prototype.countSort = function() { let len = this.l 阅读全文
posted @ 2020-03-16 15:45 七度丢失的梦 阅读(796) 评论(0) 推荐(0)
摘要:堆排序主要分为两个步骤: 1.建堆-重建堆 堆实质上是完全二叉树,必须满足:树中任一非叶子结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。 堆分为:大根堆和小根堆,升序排序采用大根堆,降序排序采用小根堆。 如果是大根堆,则通过调整函数将值最大的节点调整至堆根。 2.将堆根保存于尾部 阅读全文
posted @ 2020-03-16 13:36 七度丢失的梦 阅读(429) 评论(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 七度丢失的梦 阅读(433) 评论(0) 推荐(0)
摘要:希尔排序是希尔(Donald Shell) 于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。 先 阅读全文
posted @ 2020-03-16 01:36 七度丢失的梦 阅读(257) 评论(0) 推荐(0)
摘要:1、从数组第2个元素开始抽取元素。 2、把它与左边第一个元素比较,如果左边第一个元素比它大,则继续与左边第二个元素比较下去,直到遇到不比它大的元素,然后插到这个元素的右边。 3、继续选取第3,4,….n个元素,重复步骤 2 ,选择适当的位置插入。 冒泡、选择都是把未排序的和未排序的进行比较换位 而插 阅读全文
posted @ 2020-03-15 23:32 七度丢失的梦 阅读(1214) 评论(0) 推荐(1)
摘要:首先n=1,数组长度length 1.先用第n个元素和数组所有元素进行比较,找到数组中最小的那个元素 2.将它和数组的第n个元素交换位置 3.然后n++,重复1,2操作,直到n=length结束 // 选择排序 Array.prototype.selectSort = function () { l 阅读全文
posted @ 2020-03-15 20:24 七度丢失的梦 阅读(624) 评论(0) 推荐(0)
摘要:1.我们从数组中选择一个元素,我们把这个元素称之为中轴元素吧,然后把数组中所有小于中轴元素的元素放在其左边,所有大于或等于中轴元素的元素放在其右边,显然,此时中轴元素所处的位置的是有序的。也就是说,我们无需再移动中轴元素的位置。 2.从中轴元素那里开始把大的数组切割成两个小的数组(两个数组都不包含中 阅读全文
posted @ 2020-03-15 11:38 七度丢失的梦 阅读(462) 评论(0) 推荐(0)
摘要:1.比较相邻的元素。如果第一个比第二个大,就交换它们两个 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数 3.除去最右的元素,我们对剩余的元素做同样(1、2)的工作,如此重复下去,直到排序完成。 这里我们把排序的方法封装到Array的原型链对象上,这 阅读全文
posted @ 2020-03-08 22:11 七度丢失的梦 阅读(2122) 评论(0) 推荐(0)