還是排序算法

最近面試經常會碰到一些排序上的題目,所以回去之後一直在鞏固這方面的知識。
對於排序算法,我們不能僅看他的效率有多高,還要觀察他所佔用空間大小和穩定性。

一、排序的關鍵因素
1、空間

In-place sort:插入排序、選擇排序、冒泡排序、堆排序、快速排序。
Out-place sort:歸併排序、計數排序、基數排序、桶排序。

這就說明,當數據量過大時,選擇 In 排序的比較明智的,因爲 Out 排序所佔用的內存和空間都比較大,而 In 排序不需要。

2、穩定性
stable sort:插入排序、冒泡排序、歸併排序、計數排序、基數排序、桶排序。
unstable sort:選擇排序、快速排序、堆排序。

爲什麼穩定性這麼重要?原因很簡單,假如你的排序算法經常碰到一些讓你耗費大量時間去排序的數據,這明顯會影響整體代碼運行效率。

二、九大排序算法總結
當然,下面所講的排序算法都是未經過優化的原始方法。

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)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章