1.最快最簡單的排序,桶排序
問題:假設有5個同學,在一場考試中分別取得分數為(滿分10):3 5 8 2 5,如何將他們按從大到小的順序排列?
解決思路:定義乙個長度為11的陣列,即a[0]-a[10],下標序號分別對應分數1-10;每乙個人得到乙個分數n,就使a[n]++,如有兩個人得5分,a[5]=2;
然後依次列印陣列小標序號,對應的值為n則列印n次。
圖形解釋:
+1+1 +1 +1 +1
a[1] a[2] a[3] a[4] a[5] a[6] a7 a[8] a[9] a[10]
**如下:
#include int總結:桶排序的優點是非常快速的排序;main()
for(i=1; i<=5; i++)
for(i=0; i<=10; i++)
}getchar();
getchar();
return
0}
缺點是浪費空間,如果需要排序的數範圍非常啊大:1~999999999,那麼就需要申請1000000000個變數(桶)a[999999999]。
運用場景:需要知道各變數出現的次數。
2.氣泡排序
基本思想:每次比較兩個相鄰的元素,如果他們的順序錯誤,就把他們的位置交換。
問題:將12 35 99 18 76 五個數進行從大到小的排序。
解題思路:因為是從大到小排序,所以小的數應該排在後面。每次只比較兩個數,判斷較小的數是否在右邊,否則交換位置;
比較4次後,陣列中最小的數將出現在最右邊,我們稱之為「歸位」,這樣的一系列比較結束我們稱之為「一趟」;(歸位 和 趟 是非常重要的概念 !)
結束一趟後開始第二趟,比較3次,倒數第二小的數將出現在倒數第二的位置......
如此類推。
圖形解釋:兩個數中的較小數會一直往上走,就像冒泡一樣。
**如下:
1 #include 2總結:氣泡排序每次只比較兩個數,從數列的前兩個開始intmain()89
for(i=1; i<=n-1; i++)16}
17}1819
for(i=1; i<=n; i++)
2223
getchar();
24getchar();
25return0;
26 }
若比較n個數,則需要進行n-1趟,共有n-1個數歸位,直到最後乙個未歸位的數,排列才結束
第i趟時,只需要比較n-i次,因為已經有i-1個數歸位,不需要與歸位的數進行比較
氣泡排序的核心部分是雙重巢狀,外層是n-1趟,內層是這一趟要進行n-i次比較
缺點,氣泡排序時間複雜度非常高。
運用場景:對無序數列進行排序
3.快速排序
基本思想:確定基準數k,一般為數列中的第1個數。在數列兩邊分別向中間進行「探索」,依據判斷條件(如按順序排列),先從右端開始,當右邊某乙個值大於k時,左邊開始
當左邊某一值小於k時,左右兩個值交換,繼續探索,直到兩邊遍歷到同乙個值,將這個值與基準值k交換。
問題:對無序數列6 1 2 7 9 3 4 5 10 8進行排序。
解題思路: 確定基準數k(書中設為6),定義i j兩個變數,分別從數列兩端(a[0]和a[9])向中間靠攏,當jk時,將a[i]和a[j]交換。
若是降序,判斷條件改為,當j>k,i圖形解釋:
k i
j6 1 2 7 9 3 4 5 10 8
k i j
6 1 2 7 9 3 4 5 10 8
k i j 此時j6 1 2 7 9 3 4 5 10 8
k i j
6 1 2 7 9 3 4 5 10 8
k i j
6 1 2 7 9 3 4 5 10 8 變數i找到了比基準值大的數,滿足jk,將兩個數交換
k i j
6 1 2 5 9 3 4 7 10 8
k i j
6 1 2 5 4 3 9 7 10 8
k i/j
6 1 2 5 4 3 9 7 10 8 最後,i 和 j 相遇,則將它和基準值交換 k <==> i/j
3 1 2 5 4 6 9 7 10 8 這數最後的結果
然後我們將6的左邊和右邊繼續使用同樣的方法進行排序即可。
演算法1 啊哈演算法!
首先這裡會有乙個簡單的排序演算法。問題 0 10內的數排序,假如有五個人的分數為為9,1,2,4,5 思路 include int main for i 0 i 10 i 依次判斷a 0 a 10 for j 1 j a i j 出現了幾次就列印幾次 printf d i getchar getch...
Queue 啊哈演算法
下面摘錄啊哈演算法中的重點片段及queue實現 同時總結資料結構佇列的常見用法 佇列是一種特殊的線性結構,它只允許在佇列的首部 head 進行刪除操作,這稱為 出隊 而在佇列 的尾部 tail 進行插入操作,這稱為 入隊 當佇列中沒有元素時 即head tail 稱為 空佇列。佇列符合先進先出的原則...
《啊哈!演算法》筆記
第 1 章 排序 桶排序 氣泡排序 快速排序 第 2 章 棧 佇列 鍊錶 佇列 棧 鍊錶 模擬鍊錶 第 3 章 列舉!很暴力 奧數數的全排列 第 4 章 萬能的搜尋 深度優先搜尋 廣度優先搜尋 第 5 章 圖的遍歷 深度和廣度優先 圖的深度優先遍歷 圖的廣度優先遍歷 第 6 章 最短路徑 第 1節 ...