1、冒泡排序
冒泡算法是比较相邻的两项,假如前者比后者大,就交流他们。
假定一共有n项,那末一共须要n-1趟,第一趟须要交流n-1次,然则第一趟完毕后,末了一项基础肯定就是最大项了,所以第二次须要交流n-2次,第i次交流n-i次。
这类排序最好情况下时刻复杂度是O(n),平常情况下时刻复杂度是O(n²),最差情况下也是O(n²)。
这里是代码演示:
2、挑选排序
挑选排序是找到最小的一项,然后和第一项交流位置,然后找到第二小的和第二项交流,顺次类推,一共须要n-1次。
挑选排序在所有情况下空间复杂度都是O(n²)。
代码演示:
3、插进去排序
插进去排序是将前面的项看作数组,然后背面的项依据大小插进去到对应的位置。比方第二项和第一项对照,他该插到第一项前面照样背面呢?第三项该插到一二项的哪一个处所?
这个平常也须要插进去n-1次。
插进去排序最好情况下时刻复杂度是O(n),其他情况下也都是O(n²)。
代码演示:
4、兼并排序
原生js内里的sort要领,在firefox内里是用兼并排序完成的,而在chrome内里是用疾速排序的变体来完成的。
兼并排序是一种分治的算法,他是将一个大数组分红无数的小数组,假如小数组内里只要一项,那末直接返回,假如大于一项,就继承分,接着小数组兼并成一个大数组,兼并的时刻摆布会举行比较大小,然后排序
代码演示:
5、疾速排序
疾速排序也使用了分治的算法,也是把大数组分红小数组.
它会挑选一个中心元,建立两个摆布指针,然后分别从摆布最先动身,假如左指针碰到比中心元大的数,它会停下来,而右侧的假如碰到比中心元小的数,它也会停下来,然后二者交流位置。
接着两个指针继承前进,直到左指针超过了右指针,如许左侧的数就会小于中心元,右侧的数都邑大于中心元,接下来分红摆布数组,然后再举行上面的操纵,直到数组完整排序。
代码演示:疾速排序