根據定義我們知道,氣泡排序的基本思想就是每次比較兩個相鄰的元素,如果它們的順序錯誤就把它們交換過來。下面我們就以陣列array為例,待排序陣列array[12, 35, 99, 18 ,76],現在我們將它從大到小進行排列:
(1)第一輪
第一次比較:我們比較第1位和第0位的大小,現在第1位35,第0位12,所以互動位置
第二次比較:我們比較第2位和第1位的大小,現在第2位是99,第1位是12,所以我們交換位置
第三次比較:我們比較第3位和第2位的大小,現在第3位是18,第2位是12,所以我們交換位置
第四次比較:我們比較第4位和第3位的大小,現在第4位是76,第3位是12,所以我們交換位置
經過4次比較,我們發現最小的數字已經就位,在這個過程中,12就如同乙個氣泡一般不斷的向後翻滾,直至就位。同時我們也發現一輪的比較只能將乙個數字歸位。既然如此,接下來我們就進行下一輪的比較,將第2小的數字歸位
(2)第二輪
第一次比較:我們比較第1位和第0位,第1位是99,第0位是35,則互動位置
第二次比較:我們比較第2位和第1位,第2位是18,第1位是35,則不需要交換
第三次比較:我們比較第3位和第2位,第3位是76,第2位是18,則需要交換
經過3次比較,第2小的數字就已經就位了。因為已經歸位的數字就無需我們再比較了,所以我們只需要比較3次即可。接下來讓第3小的數字歸位也是同樣的方法
(3)第三輪
第一次比較:我們比較第1位和第0位,第1位是35,第0位是99,則我們交換位置
第二次比較:我們比較第2位和第1位,第2位76,第1位35,則我們交換位置
經過2次比較,我們發現第3小的數字已經就位,同樣的第四輪的比較,方法也是一樣的
(4)第四輪
第一次比較:我們比較第1位和第0位,第1位是76,第0位是99,則我們不需要交換位置
經過1次比較,我們發現第4小的數字已經就位,這也就意味著,我們的陣列array到此已經排序完畢。
試想,如果我們的陣列array具有n個數字需要排序呢?根據上面的思路我們能夠知道,我們只需要將n-1個數字歸位即可,即進行比較(n-1)輪;而每一輪的比較(n-1-輪數)次(或者次數也可以說是n-1-歸位數字個數),在這裡為什麼需要減1,我覺得這樣來想比較好理解:因為我們每次比較都是從第1位開始比較的,例如第1位跟第0位比,第2位跟第1位比…,而第0位不需要比較(可以想象第0位與-1位比較,但-1位不存在,所以光第0位則不需要比較了)
氣泡排序的核心部分就是雙重巢狀迴圈,外層控制需要進行比較的輪數,內層表示每輪需要進行比較的次數,**如下
private
static
int[
]bubblesort
(int
array)}}
return array;
}
排序演算法(三) 氣泡排序
氣泡排序 依次遍歷陣列 每次從頭遍歷陣列將最大的值移動到最右端 實現 package com.robert.paixu 氣泡排序 從小到大 author administrator public class bubblesortalgorithm bubblesort arrays display ...
氣泡排序 排序 氣泡排序
既然寫了計組思來想去便打算把資料結構也寫下來,寫的時候總是發現看的時候無法發現的問題,受益良多。交換排序的基本思想 exchange until sorted 順序,分支,迴圈 注意偽 的熟悉 下面介紹兩種交換演算法 首先進行聯想,用乙個圖進行輔助聯想 水冒泡過程 頂部是陣列的begin,底部理解為...
排序(三)選擇與氣泡排序
在排序中選擇與氣泡排序應該是最基本與入門的 選擇排序 基本思想 在要排序的一組數中,選出最小 或者最大 的乙個數與 第1個位置 的數交換 然後在剩下的數當中再找最小 或者最大 的與 第2個位置 的數交換,依次類推,直到第n 1個元素 倒數第二個數 和第n個元素 最後乙個數 比較為止。includev...