對於排序算法,我們不能僅看他的效率有多高,還要觀察他所佔用空間大小和穩定性。
一、排序的關鍵因素
1、空間
In-place sort:插入排序、選擇排序、冒泡排序、堆排序、快速排序。
Out-place sort:歸併排序、計數排序、基數排序、桶排序。
這就說明,當數據量過大時,選擇 In 排序的比較明智的,因爲 Out 排序所佔用的內存和空間都比較大,而 In 排序不需要。
2、穩定性
爲什麼穩定性這麼重要?原因很簡單,假如你的排序算法經常碰到一些讓你耗費大量時間去排序的數據,這明顯會影響整體代碼運行效率。
二、九大排序算法總結
當然,下面所講的排序算法都是未經過優化的原始方法。
1、插入排序
插入排序的最優時間數據是已排好序的時候,複雜度爲O(n),最壞時間數據是倒敘的時候,負責度是O(n^2)。
而且插入排序比較適合適用少量數據的排序。
2、冒泡排序
冒泡排序的最壞時間是O(n^2),其未作處理的最優時間也是O(n^2),但是做過處理後的最優時間是O(n)。
3、選擇排序
最優和最壞時間都是O(n^2),優化後最優時間是O(n)。
4、歸併排序
分治法思想,最優時間O(nlgn),最壞時間O(nlgn)。
5、快速排序
該算法的缺點和改進方法也已經在上一篇日誌裏詳細說過,在這就不多說了。
6、堆排序
最優時間O(nlgn),最差時間O(nlgn)。
7、計數排序
最優排序時間O(n+k),最壞排序時間O(n+k)。
8、基數排序
最優時間O((n+k)d),最壞時間O((n+k)d)。
9、桶排序
最優時間O(n),最壞時間O(n^2)。