加油!加油!好好努力!
一 基本的冒泡法
氣泡排序演算法,很簡單,就是比較相鄰的數字大小,大的往後移,經過一輪(內迴圈)的比較可以把較大的數字沉到底(排到最後)。如果待排序的個數是n,則經過n-1次可以實現有序排列。
下面以: 3 2 4 1 進行氣泡排序說明
第一輪 排序過程
3 2 4 1 (最初)
2 3 4 2 (比較3和2,交換)
2 3 4 1 (比較3和4,不交換)
2 3 1 4 (比較4和1,交換)
第一輪結束,最大的數4已經在最後面,因此第二輪排序只需要對前面三個數進行再比較。
根據這個描述自己先試著寫寫,一輪的迴圈可以用for迴圈來實現。寫乙個for迴圈,用以上相鄰比較的辦法,實現把一組數字中最大的數字移動到最後。**如下:
這一輪迴圈(內迴圈)實現了把最大值最大值移到最後, 接著我們需要加一輪迴圈,來實現次大值移到倒數第二位。依次迴圈,需要進行n-1次(外迴圈)。
第二輪 排序過程
2 3 1 4 (第一輪排序結果)
2 3 1 4 (比較2和3,不交換)
2 1 3 4 (比較3和1,交換
第二輪結束,第二大的數已經排在倒數第二個位置,所以第三輪只需要比較前兩個元素。
第三輪 排序過程
2 1 3 4 (第二輪排序結果)
1 2 3 4 (比較2和1,交換)
至此,排序結束。
注意:第二輪的時候,只需要比較二次(因為最大值已經確定)。第三輪只需要比較兩次(因為倒數兩個數字置已經確定)。
這個時候,應該明白外迴圈控制迴圈的次數,n-1;內迴圈控制比較次數,n-i-1;
如果還不明白,那就自己用筆在紙上舉乙個簡單的例子,自己跑一遍。應該就沒問題了,不積跬步,無以至千里;不積小流,無以成江海。自己動手寫一遍,能深刻理解冒泡法。
二 冒泡法優化
冒泡法就是不管你資料有沒有順序,就是從頭到尾進行比較,如果在排序的中間,資料已經有序了,冒泡法還是會繼續排序的。改進的辦法就是新增標誌位,如果在某次內迴圈的過程中,資料已經有序了(內迴圈沒有交換資料),則置標誌位為0,結束迴圈。
在八種排序演算法中,冒泡法是最基本的,最簡單的排序演算法。
三 記憶冒泡法
冒泡法就是 兩個for 迴圈,然後比較相鄰的數字的大小,大的往後挪。
第乙個for迴圈是決定迴圈的次數
舉例子:3個資料是迴圈2次,4個是迴圈3次,n個數迴圈n-1次,所以,for迴圈的 i 是從 0---n-1。
第二個for迴圈決定從哪個資料到哪個資料進行比較
內迴圈執行一次,就固定乙個位置。第一次內迴圈是把最大的數字移動到最後一位。如果是4個數字,相鄰比較的方法,則比較3次。如果是n個數字,則執行n-1次,這樣就固定好最大值,第二次內迴圈時候,就不和最大值比較。這樣每次都少迴圈一次,所以內迴圈的次數 j 是從0---n-i-1次。
演算法 排序演算法之氣泡排序
排序演算法系列目錄說明 排序演算法簡介說明 1.定義 將一組雜亂無章的資料按一定的規律順次排列起來。例如 輸入 a1,a2,a3,an 輸出 a1 a2 a3 an 滿足a1 a2 a3 an 排列 2.演算法效能評估術語言 穩定 如果a原本在b前面,而a b時,排序之後a仍然在b的前面。不穩定 如...
演算法 排序演算法之氣泡排序
氣泡排序 bubble sort 也是一種簡單直觀的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。作為最簡單...
排序演算法之冒泡演算法
冒泡演算法是一種簡單的 排序演算法 它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。function bubblesort...