找出不是两个数组共有的元素_数组排序--基础算法(JavaScript实现)

7533d49db5ec3574d4dcc14ce6f22f0f.png
数组排序算法中,分为基础算法,和高级算法,本篇文章给大家分享下常见当基础算法。

本篇所介绍的基础算法:

  • 冒泡排序
  • 选择排序
  • 插入排序

冒泡排序

比较相邻的数据,当左侧值大于右侧值时将它们进行互换,每一轮都找出当前数组最大值,数组长度减1,继续从第一个元素开始。

0d564497d1f3375075f4014f837bfe21.gif

示例代码:

function 

算法分析:

  • 外层循环:作用是控制内部循环的索引最大值,因为内层循环每循环完一次,就能找到一个当前数组范围最大值,并将其放到当前数组范围最后一位,所以在下一次内层循环时,就可以不去跟上一次找出的最大值进行比较,减少算法时间。
  • 内层循环:从数组第一个数值开始,依次与下一位进行比较,如果下一位大于当前值,则两者进行交换,否则不变。
  • 内层循环 inner为什么是小于等于 outer-2:outer代表数组长度,inner代表数组索引,所以要减1;然后在内层循环中,inner始终是跟inner+1做比较,所以如果只是减1,当inner等于outer-1时,就会数组越界,所以还得减1。一共就是减2

选择排序

从数组的开头开始,将第一个元素和其他元素进行比较。检查完所有元素后,最小的元素会被放到数组的第一个位置,然后算法会从第二个位置继续。

82bb6e2f7e17d66f8451ae2d5e5698db.gif

示例代码:

function 

算法分析:

  • 变量min用于存放当前范围数组最小值的索引。
  • 外循环:从数组开头开始,跟内循环找出最小值的索引位置互换。
  • 内循环:找出最小值索引并赋值给变量min。
  • outer <= length-2:索引比数组长度本身就要减1;由于遍历过的值,都是小于没有遍历的,所以最后一位一定是最大的。不需要遍历比较,减1。一共减2。
  • inner = outer + 1:由于遍历过的值,都是小于没有遍历的,所以内循环每次都从外循环的下一位置开始比较。

插入排序

从数组第二个位置开始,依次跟前一个值进行比较,如果前一个值大于当前位置的值,就把当前位置的值设置为前一个值,并且把前一个值的位置设置为当前位置,继续比较, 当前一个值小于等于当前的值,停止比较,把当前的位置的值设置为初始位置的值。

331eb7cc929643b47598f641f29ba580.gif

示例代码:

function 

算法分析:

  • temp用于存放初始位置的值。
  • 一旦前一个的值小于当前值,就停止比较,因为更前面的值都是已经排好序,当前值只要大于前一个,肯定大于前面所有值。
  • outer从1开始,是因为可以比较两个值,从0开始,就只有一个值,没有意义。

Larry:数组排序--高级算法(JavaScript实现)​zhuanlan.zhihu.com
872249b2a8bd28f85c795920a56fd146.png

逃~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值