1.什麼是排序算法?
在梳理十大排序算法之前,雖然知道排序算法是将數字或字母按增序排列的算法,但該了解過于片面,那排序算法的權威定義是什麼呢。
一個排序算法(英語:Sorting algorithm)是一種能将一串資料依照特定排序方式排列的算法。最常用到的排序方式是數值順序以及字典順序。基本上,排序算法的輸出必須遵守下列兩個原則:
- 輸出結果為遞增序列(遞增是針對所需的排序順序而言)
- 輸出結果是原輸入的一種排列、或是重組
2. 如果評判一個算法?
1.時間複雜度
執行算法需要消耗的時間。一般來說,看算法實作中的
for循環
的個數,比如說冒泡排序的算法實作中有兩個
for
,那麼它的時間複雜度是
n^2
(n代表目标集合的大小)。但時間複雜度有三種細分情況,通常是最差、平均和最好性能。
2.空間複雜度
執行算法時所消耗的空間大小。在執行算法時,需要看有沒有引入額外的記憶體空間,比如說對一個集合進行排序,沒有引入額外的空間,那麼時間複雜度就是
O(n)
,如果建立一個大小和目标集合相同的集合,那麼空間複雜度就是
O(n^2)
。
3.穩定性
為啥算法還有穩定性,這種聽起來不太好了解。我了解是算法排序後,各元素的相對位置的唯一性有沒有變化,如果執行了多次該算法,各元素的相對位置都是固定且唯一的,那麼就說這個算法是穩定的,否則稱之為不穩定。
3.十大排序算法
1.算法之間的不同在于适用場景不同,各有千秋。
- 冒泡排序(bubble sort)
- 選擇排序(selection sort)
- 插入排序(insertion sort)
- 快速排序(quick sort)
- 歸并排序(merge sort)
- 希爾排序(shell sort)
- 堆排序(heap sort)
- 計數排序(counting sort)
- 桶排序(bucket sort)
- 基數排序(radix sort)
2.簡要比較
4.算法動态可視化學習資料
- https://visualgo.net/zh
1.排序算法 wiki