1、十大排序算法
冒泡排序(Bubble Sort)
插入排序(Insertion Sort)
希尔排序(Shell Sort)
选择排序(Selection Sort)
快速排序(Quick Sort)
归并排序(Merge Sort)
堆排序(Heap Sort)
计数排序(Counting Sort)
桶排序(Bucket Sort)
基数排序(Radix Sort)
2、应用场景
- 数据特征
大量重复的元素,三路快排是更好地选择
取值范围非常有限,计数排序是更好的选择
需要稳定排序,归并排序是更好的选择- 存储状况
快排是依赖于数组的随机存储
链表存储的,归并排序是更好的选择,
数据量很大或者内存很小,不足以装载在内存里,需要使用外排序算法。
2.1 冒泡排序(Bubble Sort)
一般作为学习理解排序原理时使用,实际应用中不会使用
2.2 插入排序(Insertion Sort)
如果大部分数据距离它正确的位置很近或者近乎有序?例如银行的业务完成的时间
如果是这样的话,插入排序是更好的选择。
2.2 希尔排序(Shell Sort)
相对于直接插入排序,希尔排序要高效很多,因为当gap 值较大时,对子数组进行插入排序时要移动的元素很少,元素移动的距离很大,这样效率很高;在gap逐渐减小过程中,数组中元素已逐渐接近排序的状态,所以需要移动的元素逐渐减少;当gap为1时,相当于进行一次直接插入排序,但是各元素已接近排序状态,需要移动的元素很少且移动的距离都很小。
2.2 选择排序(Selection Sort)
2.2 快速排序(Quick Sort)
2.2 归并排序(Merge Sort)
内存空间不足的时候使用归并排序,能够使用并行计算的时候使用归并排序。
2.2 堆排序(Heap Sort)
堆排序适合于数据量非常大的场合(百万数据)。
堆排序不需要大量的递归或者多维的暂存数组。这对于数据量非常巨大的序列是合适的。比如超过数百万条记录,因为快速排序,归并排序都使用递归来设计算法,在数据量非常大的时候,可能会发生堆栈溢出错误。
堆排序会将所有的数据建成一个堆,最大的数据在堆顶,然后将堆顶数据和序列的最后一个数据交换。接下来再次重建堆,交换数据,依次下去,就可以排序所有的数据。
2.2 计数排序(Counting Sort)
计数排序需要占用大量空间,它仅适用于数据比较集中的情况。比如 [0 100],[10000 19999] 这样的数据。