排序的一些方法(穩定性,內外排序,時間空間複雜度)

2022-02-15 08:52:21 字數 2627 閱讀 3995

首先,我們經歷了這麼乙個問題:在對大量資料進行排序的時候,不僅僅是乙個小陣列,

而是萬級,百萬級,億級。。。資料條數的多了的時候,我們自然就想到了大資料。。。雖然我們

學習的是前端,但是涉及到處理效能效率的時候,層次就上去了。c這門語言比起js更底層,更

嚴格,這裡引入乙個鏈結對比了

(1)對於評述演算法優劣術語的說明

穩定:如果a原本在b前面,而a=b,排序之後a仍然在b的前面;

不穩定:如果a原本在b的前面,而a=b,排序之後a可能會出現在b的後面;

內排序:所有排序操作都在記憶體中完成;

外排序:由於資料太大,因此把資料放在磁碟中,而排序通過磁碟和記憶體的資料傳輸才能進行;

時間複雜度: 乙個演算法執行所耗費的時間。

(此圖純屬抄襲)

1.氣泡排序:

解析:1.比較相鄰的兩個元素,如果前乙個比後乙個大,則交換位置。

2.第一輪的時候最後乙個元素應該是最大的乙個。

3.按照步驟一的方法進行相鄰兩個元素的比較,這個時候由於最後乙個元素已經是最大的了,所以最後乙個元素不用比較。

2.快速排序:

解析:快速排序是對氣泡排序的一種改進,第一趟排序時將資料分成兩部分,一部分比另一部分的所有資料都要小。然後遞迴呼叫,在兩邊都實行快速排序。

3.插入排序:

解析:(1) 從第乙個元素開始,該元素可以認為已經被排序

(2) 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄

(3) 如果該元素(已排序)大於新元素,將該元素移到下一位置

(4) 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置

(5)將新元素插入到下一位置中

(6) 重複步驟2

2.二分查詢:

解析:二分查詢,也為折半查詢。首先要找到乙個中間值,通過與中間值比較,大的放又,小的放在左邊。再在兩邊中尋找中間值,持續以上操作,直到找到所在位置為止。

(1)遞迴方法

(2)非遞迴方法

4.選擇排序:

解析:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。

以此類推,直到所有元素均排序完畢。

5.希爾排序:

解析:先將整個待排序的記錄序列分割成為若干子串行分別進行直接插入排序

6.歸併排序:

解析:歸併排序是一種穩定的排序方法。將已有序的子串行合併,得到完全有序的序列;即先使每個子串行有序,再使子串行段間有序。

7.堆排序:

解析:堆排序(heapsort)是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是

小於(或者大於)它的父節點。

8.計數排序:

解析:計數排序使用乙個額外的陣列c,其中第i個元素是待排序陣列a中值等於i的元素的個數。然後根據陣列c來將a中的元素排到正確的位置。它只能對整數進行排序。

9.桶排序:

解析:假設輸入資料服從均勻分布,將資料分到有限數量的桶裡,每個桶再分別排序(有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排

10.基數排序:

解析:基數排序是按照低位先排序,然後收集;再按照高位排序,然後再收集;依次類推,直到最高位。有時候有些屬性是有優先順序順序的,先按低優先順序排序,再按高優

先級排序。最後的次序就是高優先順序高的在前,高優先順序相同的低優先順序高的在前。基數排序基於分別排序,分別收集,所以是穩定的。

排序的穩定性

這幾天筆試了好幾次了,連續碰到乙個關於常見排序演算法穩定性判別的問題,往往還是多選,對於我以及和我一樣拿不準的同學可不是乙個能輕易下結論的題目,當然如果你筆試之前已經記住了資料結構書上哪些是穩定的,哪些不是穩定的,做起來應該可以輕鬆搞定。本文是針對老是記不住這個或者想真正明白到底為什麼是穩定或者不穩...

排序的穩定性

穩定性定義 排序前後兩個相等的數相對位置不變,則演算法穩定。穩定性得好處 從乙個鍵上排序,然後再從另乙個鍵上排序,第乙個鍵排序的結果可以為第二個鍵排序所用。氣泡排序 小的元素往前調或者把大的元素往後調 比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間 因為相等的元素不會進行交換,所以穩定 插入排...

排序演算法的穩定性

首先,排序演算法的穩定性大家應該都知道,通俗地講就是能保證排序前2個相等的數其在序列的前後位置順序和排序後它們兩個的前後位置順序相同。在簡單形式化一下,如果ai aj,ai原來在位置前,排序後ai還是要在aj位置前。為了簡便下面討論的都是不降序排列的情形,對於不公升序排列的情形討論方法和結果完全相同...