JS排序算法

1、冒泡排序

冒泡算法是比较相邻的两项,假如前者比后者大,就交流他们。
假定一共有n项,那末一共须要n-1趟,第一趟须要交流n-1次,然则第一趟完毕后,末了一项基础肯定就是最大项了,所以第二次须要交流n-2次,第i次交流n-i次。

《JS排序算法》

这类排序最好情况下时刻复杂度是O(n),平常情况下时刻复杂度是O(n²),最差情况下也是O(n²)。


这里是代码演示: 

冒泡排序

2、挑选排序

挑选排序是找到最小的一项,然后和第一项交流位置,然后找到第二小的和第二项交流,顺次类推,一共须要n-1次。

《JS排序算法》

挑选排序在所有情况下空间复杂度都是O(n²)。

代码演示:

挑选排序

3、插进去排序

插进去排序是将前面的项看作数组,然后背面的项依据大小插进去到对应的位置。比方第二项和第一项对照,他该插到第一项前面照样背面呢?第三项该插到一二项的哪一个处所?
这个平常也须要插进去n-1次。

《JS排序算法》

插进去排序最好情况下时刻复杂度是O(n),其他情况下也都是O(n²)。

代码演示:

插进去排序

4、兼并排序

原生js内里的sort要领,在firefox内里是用兼并排序完成的,而在chrome内里是用疾速排序的变体来完成的。

《JS排序算法》

兼并排序是一种分治的算法,他是将一个大数组分红无数的小数组,假如小数组内里只要一项,那末直接返回,假如大于一项,就继承分,接着小数组兼并成一个大数组,兼并的时刻摆布会举行比较大小,然后排序

代码演示:

兼并排序

5、疾速排序

疾速排序也使用了分治的算法,也是把大数组分红小数组.
它会挑选一个中心元,建立两个摆布指针,然后分别从摆布最先动身,假如左指针碰到比中心元大的数,它会停下来,而右侧的假如碰到比中心元小的数,它也会停下来,然后二者交流位置。
接着两个指针继承前进,直到左指针超过了右指针,如许左侧的数就会小于中心元,右侧的数都邑大于中心元,接下来分红摆布数组,然后再举行上面的操纵,直到数组完整排序。

《JS排序算法》
代码演示:疾速排序

    原文作者:尹光耀
    原文地址: https://segmentfault.com/a/1190000006757051
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞