七大排序演算法

2021-08-28 03:38:25 字數 3858 閱讀 7581

阿狗要好好來整理一下啦,感覺自己資料結構不太熟,比如排序演算法的思想大概理解,用**復現又是另一回事,懂得不同場景下的應用又又又又是另一回事,碰到筆試排序演算法的題又雙叒叕是另另另一回事。所以說啊,學無止境,學海無涯阿狗得飄啊。還有還長一段時間呢,阿狗加油ヾ(◍°∇°◍)ノ゙

通過與相鄰元素的比較和交換來把最大的值交換到最後面。這個過程類似於水泡一樣,重的往下沉(輕的往上浮),因此得名。

定義兩個for迴圈,外層迴圈控制排序趟數,內層迴圈控制每一趟排序多少次

這個圖實在是太可愛啦,如圖所以,每次相鄰兩兩比較將最大的往後放,再來放次大的,直到遍歷結束。

看我撈**還帶測試:

public class bubblesort 

}} }

public static void main(string args);

bubblesort.bubblesort(arr);

for(int i=0;i首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找次小元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。 

定義兩個for迴圈,外層迴圈控制比較次數,內層迴圈遍歷未排序元素。

與氣泡排序相比,冒泡是通過相鄰元素的比較和交換,而選擇排序是通過對整體遍歷一遍再進行的挑選,是在確定了最小數的前提下才進行交換,大大減少了交換的次數。

通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄找到相應位置並插入。這個其實和我們打撲克牌的時候一毛一樣,你想想你是怎麼排牌的,哈哈哈哈哈~~

實現:定義兩個for迴圈,外層迴圈遍歷元素,內層迴圈比較未排序元素應該向已排序元素插入的位置。

}}遞減增量排序演算法,實際上是一種分組插入方法。

先取定乙個小於n的整數d1作為第乙個增量,把錶的全部記錄分成d1個組,所有距離為d1的倍數的記錄放在同乙個組中,在各組內進行直接插入排序;然後,取第二個增量d2(<d1),重複上述的分組和排序,直至所取的增量dt=1(dt

三重迴圈,一重用來控制每次步長,直到變為1。一重用來控制比較的元素,一重控制相隔n個步長要比較的元素。

同時注意在第三重比較的時候,為了防止陣列越界我定義j=i-h比較arr [ j ]arr [ j+h ]的值。

public static void shell(int arr)

else break;}}

} }

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

注意:如果想公升序排序就使用大頂堆,反之使用小頂堆。原因是堆頂元素需要交換到序列尾部。

實現:1)建立乙個堆h[0..n-1]

2)把堆首(最大值)和堆尾互換

3)把堆的尺寸縮小1,並呼叫shift_down(0),目的是把新的陣列頂端資料調整到相應位置

4) 重複步驟2,直到堆的尺寸為1

for(int i=0;i它是一種非比較排序。基數排序是按照低位先排序,然後收集;再按照高位排序,然後再收集;依次類推,直到最高位。

相關概念

穩定:兩個相同的值a=b,如果a原本在b前面,排序之後a仍然在b的前面。

不穩定:兩個相同的值a=b,如果a原本在b的前面,排序之後 a 可能會出現在 b 的後面。

時間複雜度對排序資料的總的操作次數。反映當n變化時,操作次數呈現什麼規律。

空間複雜度:是指演算法在計算機內執行時所需儲存空間的度量,它也是資料規模n的函式。 

資料規模一般(快速排序、歸併排序)

資料規模很大(歸併、桶)

待排序列初始基本有序(正序),宜用直接插入,冒泡

注:快速排序是目前基於比較的內部排序中最好的方法, 其次是歸併和希爾,堆排序在資料量很大時效果明顯。當資料是隨機分布時快速排序的平均時間最短。

七大排序演算法

氣泡排序 void bubble int a,int n 選擇排序 void select sort int a,int n n為陣列a的元素個數 將第i 小的數,放在第i 個位置 如果剛好,就不用交換 if i min index 插入排序 typedef int elementtype void...

七大排序演算法

七大排序分類 插入排序 直接插入排序 穩定 希爾排序 不穩定 選擇排序 簡單選擇排序 穩定 堆排序 不穩定 交換排序 氣泡排序 穩定 快速排序 不穩定 歸併排序。直接插入排序 時間複雜度 o n 2 演算法穩定性 穩定void straightinsertsort int a,int n 氣泡排序 ...

七大排序演算法

首先回顧下各種排序的主要思路 一 氣泡排序 氣泡排序主要思路是 通過交換使相鄰的兩個數變成小數在前大數在後,這樣每次遍歷後,最大的數就 沉 到最後面了。重複n次即可以使陣列有序。氣泡排序改進1 在某次遍歷中如果沒有資料交換,說明整個陣列已經有序。因此通過設定標誌位來記錄此次遍歷有無資料交換就可以判斷...