用菜鳥的思維學習演算法 -- 馬桶排序、冒泡排序和快速排序 【博主】反骨仔 【來源】http://www.cnblogs.com/liqingwen/p/4994261.html 馬桶排序 一、場景:期末考試完了,老師要將同學們的分數從高到低排序。假設班上有 5 名同學,分別考了 5 分、3 分、5 ...
用菜鳥的思維學習演算法 -- 馬桶排序、冒泡排序和快速排序
【博主】反骨仔 【來源】http://www.cnblogs.com/liqingwen/p/4994261.html
馬桶排序
一、場景:期末考試完了,老師要將同學們的分數從高到低排序。假設班上有 5 名同學,分別考了 5 分、3 分、5 分、2 分和 8 分【滿分:10 分】,排序後的結果就是 8 5 5 3 2,現在,讓我們先思考 10 分鐘吧! 二、思路: (1)先創建一個數組 int scores[11],就有 scores[0]~scores[10] 共 11 個變數。我們用變數值為 0 表示沒有人得到該分數,即 scores [0]=0 表示沒有人得 0 分,scores [10]=0 表示沒有人得 10 分,而 scores [8]=1 表示有一個人得到 8 分。





冒泡排序
一、基本思想:每次比較相鄰的兩個 元素,按需調整順序 二、題目:要求將 12 35 99 18 76 這 5 個數進行從大到小排序 三、思路: (1)先比較第 1 位和第 2 位的大小,12<35,因為希望越小越靠後,所以要調整兩者順序,交換後的結果:35 12 99 18 76 (2)現在比較第 2 位和第 3 位的大小,12<99,所以需要交換位置,交換後的結果為:35 99 12 18 76 (3)接著比較第 3 位和第 4 位的大小,12<18,交換後的結果為:35 99 18 12 76 (4)最後比較第 4 位和第 5 位的大小,12<76,交換後的結果為:35 99 18 76 12
快速排序
一、場景:對 6 1 2 7 9 3 4 5 10 8 這 10 個數進行排序 二、思路: 先找一個基準數(一個用來參照的數),為了方便,我們選最左邊的 6,希望將 >6 的放到 6 的右邊,<6 的放到 6 左邊。如:3 1 2 5 4 6 9 7 10 8 先假設需要將 6 挪到的位置為 k,k 左邊的數 <6,右邊的數 >6 (1)我們先從初始數列“6 1 2 7 9 3 4 5 10 8 ”的兩端開始“探測 ”,先從右邊往左找一個 <6 的數,再從左往右找一個 >6 的數,然後交換。我們用變數 i 和變數 j 指向序列的最左邊和最右邊。剛開始時最左邊 i=0 指向 6,最右邊 j=9 指向 8


(5)目前 j 指向的值為 9,i 指向的值為 4,j-- 發現 3 符合要求,接著 i++ 發現 i=j,說明這一輪移動結束啦。現在將基準數 6 和 3 進行交換,結果:3 1 2 5 4 6 9 7 10 8;現在 6 左邊的數都是 <6 的,而右邊的數都是 >6 的,但游戲還沒結束


【參考】文字與插圖來源《啊哈!演算法》