9.3.1 最簡單排序實現
無論你學習哪種程式設計語言,在學到迴圈和數組時,通常都會介紹一種排序演算法來作為例子,而這個演算法一般就是冒泡排序。並不是它的名稱很好聽,而是說這個演算法的思路最簡單,最容易理解。因此,哪怕大家可能都已經學過冒泡排序了,我們還是從這個演算法開始我們的排序之旅。
冒泡排序(Bubble Sort)一種交換排序,它的基本思想是:兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止。冒泡的實現在細節上可以很多種變化,我們將分別就3種不同的冒泡實現代碼,來講解冒泡排序的思想。這裡,我們就先來看看比較容易理解的一段。
/* 對順序表L作交換排序(冒泡排序初級版) */void BubbleSort0(SqList *L){ int i,j; for(i=1;i<L->length;i++) { for(j=i+1;j<=L->length;j++) { if(L->r[i]>L->r[j]) { swap(L,i,j); /* 交換L->r[i]與L->r[j]的值 */ } } }}
這段代碼嚴格意義上說,不算是標準的冒泡排序演算法,因為它不滿足“兩兩比較相鄰記錄”的冒泡排序思想,它更應該是最最簡單的交換排序而已。它的思路就是讓每一個關鍵字,都和它後面的每一個關鍵字比較,如果大則交換,這樣第一位置的關鍵字在一次迴圈後一定變成最小值。如圖9-3-2,假設我們待排序的關鍵字序列是{9,1,5,8,3,7,4,6,2},當i=1時,9與1交換後,在第一位置的1與後面的關鍵字比較都小,因此它就是最小值。當i=2時,第二位置先後由9換成5,換成3,換成2,完成了第二小的數字交換。後面的數字變換類似,不再介紹。
它應該算是最最容易寫出的排序代碼了,不過這個簡單易懂的代碼,卻是有缺陷的。觀察後發現,在排序好1和2的位置後,對其餘關鍵字的排序沒有什麼協助(數字3反而還被換到了最後一位)。也就是說,這個演算法的效率是非常低的。
出處:http://www.cnblogs.com/cj723/archive/2011/04/15/2016679.html