指出希尔排序,归并排序,快速排序,堆排序,基数排序中稳定的排序方法,并对不稳定的举出反例。
稳定的排序算法是指,如果两个元素相等,它们在排序后的顺序与排序前的顺序相同。
上述算法中稳定的排序方法:归并排序、基数排序
藉助于"比较"进行排序的算法在最坏情况下能达到的最好的时间复杂度是什么?
利用"比较"进行排序的算法在最坏情况下能达到的最好的时间复杂度是 O ( n log n ) \mathcal{O}(n \log n) O(nlogn)。
指出直接插入排序,冒泡排序,快速排序,堆排序,基数排序算法各适合的场合。
-
直接插入排序:当待排序元素个数n较少,元素的初始排列基本有序(即正序)或者分布较随机,且要求稳定时,采用直接插入排序为宜。
-
冒泡排序:适合于数据量较小的情况。冒泡排序的优点是算法简单,易于实现,但是效率较低,所以不适合处理大量的数据。
-
快速排序:当待排序元素个数n较大,且排序码分布较随机,对稳定性不做要求时,采用快速排序为宜。
-
堆排序:当待排序元素个数n较大,排序码分布可能会出现正序或者逆序的情况,且对稳定性不作要求时,则采用堆排序(或者归并排序)算法。
-
基数排序:当待排序元素个数n较大,内存空间允许,且要求排序结果稳定,采用基数排序(或者归并排序)为宜。
指出各种排序算法的平均时间复杂度、最坏情况的时间复杂度。
排序算法 | 平均时间复杂度 | 最坏情况的时间复杂度 |
---|---|---|
直接插入排序 | O ( n 2 ) \mathcal{O}(n^2) O(n2) | O ( n 2 ) \mathcal{O}(n^2) O(n2) |
折半插入排序 | O ( n 2 ) \mathcal{O}(n^2) O(n2) | O ( n 2 ) \mathcal{O}(n^2) O(n2) |
希尔排序 | O ( n 1.3 ) \mathcal{O}(n^{1.3}) O(n1.3) | O ( n 2 ) \mathcal{O}(n^2) O(n2) |
起泡排序(冒泡排序) | O ( n 2 ) \mathcal{O}(n^2) O(n2) | O ( n 2 ) \mathcal{O}(n^2) O(n2) |
快速排序 | O ( n log n ) \mathcal{O}(n \log n) O(nlogn) | O ( n 2 ) \mathcal{O}(n^2) O(n2) |
简单选择排序 | O ( n 2 ) \mathcal{O}(n^2) O(n2) | O ( n 2 ) \mathcal{O}(n^2) O(n2) |
堆排序 | O ( n log n ) \mathcal{O}(n \log n) O(nlogn) | O ( n log n ) \mathcal{O}(n \log n) O(nlogn) |
归并排序 | O ( n log n ) \mathcal{O}(n \log n) O(nlogn) | O ( n log n ) \mathcal{O}(n \log n) O(nlogn) |
基数排序 | O ( n k ) \mathcal{O}(nk) O(nk) | O ( n k ) \mathcal{O}(nk) O(nk) |
注:在基数排序中,k是数字的最大位数。