1. 程式人生 > >自我整理:幾種排序演算法的理解

自我整理:幾種排序演算法的理解

簡單來自己做個筆記,溫故一下排序方法。

1.直接排序 顧名思義,直接排,怎麼直接排,每次迴圈找出最下的扔到第一個,或者找到最大的扔到最後一個,剩下的數字,繼續迴圈找最小的往前扔,暴力排完。簡單粗暴,居家必備。

2.插入排序 顧名思義,通俗易懂,插入排序,就是資料互相插,但首先要選個起點和空才能插。於是我們選擇一個key值, 每個數和key比較,比他小插左邊,比他大插右邊,大致思想是這樣子,不過實現起來還是要比較很多次,時間複雜度和直接排序沒有差。

3.氣泡排序 顧名思義,冒泡,就是讓資料飄起來,987654321為例,通過和自己相鄰的數字比較,讓9飄上去876543219,到了第一個,每個數字都這樣操作,最後就有序了,這個過程可以說是很beautiful了,但是極端時間複雜度還是很高,我直接排序還是不服。

4.希爾排序 插入排序升級版,插入排序的數學改進,插入麻煩就麻煩在,插完之後還要再比較,要是極端亂序十分複雜。希爾排序,就相出了個好辦法,不斷分組,假設這個分組值是2吧,我們不直接插,我們分組插,姑且稱為巨集觀插入,132465這個陣列,分組值是2,length是6, 那咱就分6/2=3組,每組分別是[1,4],[3,6],[2,5], 每小組進行插入排序,排完之後,再分組,3/2=1, 等於1其實就是插入排序了,再對這個相對於亂序而言有序的陣列進行插入排序,就輕鬆了很多是吧。但是極端情況O(n^2),還是很大嘞,我直接排序還是不服。

5.快速排序 據我理解,就是不斷地取key值,比key小的放左邊,比key大的放右邊,然後繼續取key繼續操作。好像比較快,但是極端情況,時間複雜度還是O(n^2)。

6.堆疊排序

堆(英語:heap)是電腦科學中一類特殊的資料結構的統稱。堆通常是一個可以被看做一棵樹的陣列物件。堆總是滿足下列性質: 堆中某個節點的值總是不大於或不小於其父節點的值; 堆總是一棵完全二叉樹。 將根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小根堆。常見的堆有二叉堆、斐波那契堆等。

需要用到完全二叉樹,我得畫個圖。。這是大堆,一般用來拍升序的 小堆排降序 在這裡插入圖片描述 然後排序 滿足對定義 在這裡插入圖片描述 堆排序是一種選擇排序,整體主要由構建初始堆+交換堆頂元素和末尾元素並重建堆兩部分組成。其中構建初始堆經推導複雜度為O(n),在交換並重建堆的過程中,需交換n-1次,而重建堆的過程中,根據完全二叉樹的性質,[log2(n-1),log2(n-2)…1]逐步遞減,近似為nlogn。所以堆排序時間複雜度一般認為就是O(nlogn)級。

7.歸併排序 和快速排序很像,一直二分排序。

8.基數排序 先排個位再排十位一直排到最高位。。。 穩定排序