這是一個建立於
的文章,其中的資訊可能已經有所發展或是發生改變。
冒泡排序(Bubble Sort),是一種電腦科學領域的較簡單的排序演算法。
演算法原理
冒泡排序演算法的運作如下:
- 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
- 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
- 針對所有的元素重複以上的步驟,除了最後一個。
- 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較
演算法穩定性
冒泡排序是就地排序,且它是穩定的。
演算法描述
go語言
package bubblesort//冒泡排序func BubbleSort(values []int) {flag := truefor i := 0; i < len(values)-1; i++ {flag = truefor j := 0; j < len(values)-i-1; j++ {if values[j] > values[j+1] {values[j], values[j+1] = values[j+1], values[j]flag = false}}if flag == true {break}}}測試案例:
package bubblesortimport "testing"//冒泡排序測試func TestBubbleSort1(t *testing.T) {values := []int{5, 4, 3, 2, 1}BubbleSort(values)if values[0] != 1 || values[1] != 2 || values[2] != 3 || values[3] != 4 || values[4] != 5 {t.Error("BubbleSort() failed Got", values, "Expected 1 2 3 4 5")}}func TestBubbleSort2(t *testing.T) {values := []int{5, 5, 3, 2, 1}BubbleSort(values)if values[0] != 1 || values[1] != 2 || values[2] != 3 || values[3] != 5 || values[4] != 5 {t.Error("BubbleSort() failed. Got", values, "Expected 1 2 3 5 5")}}func TestBubbleSort3(t *testing.T) {values := []int{5}BubbleSort(values)if values[0] != 5 {t.Error("BubbleSort() failed. Got", values, "Expected 5")}}