js排序的时间复杂度_JavaScript插入排序算法通俗说明

插入排序概述

插入排序是将数组分为待排序和已排序两个区间。依次从待排序区间中取出一项,用该项跟已排序区间项逐个对比,通过位移来实现插入到对应位置的排序方式。插入排序平均时间复杂度是:O(n^2)

步骤是:

  1. 先建立两个循环,外循环用于遍历待排序区间,内循环用来遍历已排序区间。
  2. 从待排序中按顺序取出一项暂存起来,将该项自右往左与已排序项逐个对比,当遇到比自己大的项(表示升序)时,将该位置右移1位。
  3. 再将待排序区间里右移后空出来的位置赋值为暂存项。此时已排序区间增加了一项,待排序区间减少了一项,继续第2步直到待排序遍历完成。

插入排序实现

插入排序有多种实现方式,这里介绍常见的3种:

1、通用实现方式,自左往右遍历待排序数组,再从当前的左侧位置开始自右往左循环已排序数组,再逐个比较和移动被比较项,最后将当前项填入到空缺位置上。

a97ff109ee79917f7eb0990f20472a3a.png

2、利用数组splice方法,类似打扑克牌,先拿出要排序的牌,然后找准位置插入。这种方式利用了原生API,减少了数组反复移动位置的操作。性能上之前差不多。

5d8359b15f7f268796e1cc7412e220b0.png

3、新建数组法与splice结合法,这种方式会多建立一个数组,也就会多占用一个空间,但理解起来最容易,也利用了JS语言的特性。

67e484069e25a02b6889b4d3f7b1cbc2.png

插入排序通俗说明

插入排序与冒泡、选择都是比较简单好懂的排序方式,性能上也差不多。插入排序通俗来讲就像打扑克牌排序,你抓了一手牌之后。假如是:2、1、5、3、4,你会:

1、先把牌分成两组,假定左侧第一张牌为一组(标识A,这时只有2),其他牌为另外一组(标识B,包括1、5、3、4)。

2、从B组里面从左起选择第一张牌(位置空出等待填充),也就是1,拿这张牌与A组里面从右往左挨个对比,当遇到比这张牌还小时就在这个位置停留下来(如果A组全部比这张牌都大那就在A组最前面停留下来,如果A组里没有比这张牌大的就在当前位置停留)。

3、然后将A组里比这张牌(也就是1)大的牌逐个往右移动1位,原B组空出位置被填充,此时刚才停留的位置空出,将1这张牌插入在这里。这时候A组增加一个数字,变为:1、2,B组减少1个,变为:5、3、4。

4、移动指针,继续指向B组的第一个,也就是5。用5这张牌重复第二部,即拿5去跟A组自右往左逐个比较,然后插入到A组。此时A组:1、2、5,B组:3、4。

5、将B组里数字按照第二部重复操作,直到B组为空时整个循环结束。此时A组为:1、2、3、4、5。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值