排序算法在面试过程中是面试官常常询问的知识点。掌握经典排序算法的基本原理以及其应用场景是十分必要的。(下面将分别进行说明)
算法分类介绍:
算法原理介绍:
关于排序算法基本原理的详细介绍在其他博文已更新,可通过以下链接进行访问。
1.冒泡排序
2.选择排序
3.直接插入排序
4.快速排序
5.堆排序
6.shell排序(希尔排序)
7.归并排序
8.基数排序
八大排序空间、效率分析:
应用场景分析:
- 如果n较小(n <= 50),可采用直接插入排序或者选择排序。
- 如果序列初始状态基本有序,则可以使用直接插入(越有序越快)、冒泡排序或者随机的快速排序。
- 如果n较大,则应该使用时间复杂度为O(nlog 2n)的排序算法,比如快速排序、堆排序或者是归并排序。
- 快速排序是目前内部排序中被公认为最好的方法,当待排序列的关键字是随机分布时,快速排序的平均时间最短。C++11泛型算法sort()函数的实现就是通过快速排序实现的。
- 堆排序所需要的辅助空间少于快速排序,并且堆排序不会出现快速排序中可能出现的最坏情况。快速排序和堆排序都不是不稳定的排序算法。
- 基数排序是一种稳定的排序算法,但其是通过单个记录进行两两归并的。因此在使用时通常不是单独的使用,而是将直接插入排序结合在一起使用。先使用直接插入排序获得较长的子文件,再通过归并排序两两归并。由于直接插入排序是有序的,因此改进后的归并排序仍然是有序的。