排序算法是最基本最常用的算法,不同的排序算法在不同的场景或应用中会有不同的表现,我们需要对各种排序算法熟练才能将它们应用到实际当中,才能更好地发挥它们的优势。之前学习的排序算法都是用c或者c++实现的,没有用过Javascript实现过,通过查阅资料,决定自己总结一下这十个排序算法。
排序算法的说明
1、定义
2、对算法的评价
1)稳定性
稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;
不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;
稳定排序:冒泡排序、插入排序、选择排序、归并排序、基数排序、基数排序、桶排序;
不稳定排序:快速排序、希尔排序、堆排序;
2)内存使用
内排序:所有排序操作都在内存中完成;
外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;
内排序:插入排序、选择排序、冒泡排序、堆排序、快速排序、希尔排序;
外排序:归并排序、计数排序、基数排序、桶排序;
3)时间复杂度
时间复杂度: 一个算法执行所耗费的时间。
空间复杂度: 运行完一个程序所需内存的大小。
4)算法分类
交换排序:冒泡排序、快速排序插入排序:直接插入排序、希尔排序
选择排序、直接选择排序、堆排序
合并排序:归并排序
其他排序:基数排序、计数排序、桶排序
5)总结
对各种算法进行对比,用图表说明,如下所示:
图片名词解释:
n : 数据规模;
k :“桶”的个数;
In-place: 占用常数内存,不占用额外内存;
Out-place : 占用额外内存;
以下是分别进行介绍:
2、用JavaScript实现十大经典排序算法--冒泡排序