1.冒泡排序
冒泡排序是最简单的排序算法。它经过反复处理待排序的数组,从首个元素开始向下判断,直到到达当前已经排好顺序的位置为止。当发现相邻两个元素的顺序不对时,交换这两个元素的位置。
冒泡排序最明显的特点就是能够判断输入的数组是否已经排好顺序。
2.选择排序
每一次从待排序的数组元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排列完毕。在所有的完全依靠交换去移动元素的排序方法中,选择排序是非常好的一种排序方法。
3.插入排序
插入排序是非常简单面且高效的排序算法,它是通过比较找到合适的位置插入元素来达到排序的目的。插入排序每次都会从输入的数据中移除一个元素,并将其正确地插入已经排好顺序的范围内。具体要移除哪一个元素, 取决于随机选取, 重复执行该过程,直到处理完所有的元素为止。
4.快速排序
快速排序是指首先随机挑选一个元素, 然后以这个元素为基准对数组进行分割,即将所有比它小的元素排在比它大的元素的前面。
5.堆排序
堆排序是使用堆来实现的选择排序,堆排序的过程就是将待排序的序列构造成一个堆,选出堆中最大的移走,再把剩余的元素调整成堆,找出最大的再移走,重复直至变成一个有序序列。
6.归并排序
归并排序属于分治排序算法。归并排序是指把数组划分为两部分,对这两部分分别进行排序后,再归并在一起。在对其中的一部分进行排序时,使用同样的排序算法,最后归并两个只有一个元素的数组。
7.桶排序
桶排序是指在将要排序的集合中把同一个值域的元素放入同一个桶内,也就是根据元素值的特性将集合划分为多个区域,划分后形成的多个桶,从值域上看是处于有序状态的。再对每个桶中元素进行排序,则所有桶中元素构成的集合是排好顺序的。
8.基数排序
基数排序是将整数按位数分割成不同的数字,然后按照每个位数进行比较,由于整数也可以表达字符串和浮点数,所以基数排序也不是只能使用于整数。
基数排序的思想,将所有待比较的数值(正整数)变成统一的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行排序。从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。
排序算法的各自使用场最和适用场合:
(1)从平均时间来看,快速排序是效率最高的,但快速排序在最坏情况下的时间性能不如堆排序和归并排序。然而,在n较大时归并排序使用的时间相对较少,但使用的额外空间比较多。
(2)在冒泡排序、插入排序、简单选择排序中,插入排序最简单,当序列是基本有序或者n较小时,直接插入排序是最好的方法,因此经常将它和快速排序、归并排序等结合在一起使用。
(3)基数排序的时间复杂度也可以写成。 基数排序适用于n值较大而关键字较小的序列。当关键字较大且序列中大多数记录的最高关键字均不相同时,则可以先按照最高关键字不同,将序列分成若干个小的子序列,然后进行直接插入排序。
(4)从方法的稳定性来比较,基数排序是最稳定的排序方法,时间复杂度为的简单排序也是比较稳定的。快速排序、堆排序等其他排序方法都是不稳定的。稳定性需要根据具体需求进行选择。