比較排序 交換排序 1 氣泡排序演算法

2022-06-29 14:33:12 字數 1684 閱讀 5766

​ 氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。

演算法思想:每次都是從頭一直比較到尾,即使有些元素已經有序了

func bubblesort1(tosortnumbers int) error 

//最後乙個元素不用再排序了,因此迴圈次數為:len(tosortnumbers)-1 次

for i := 0; i < len(tosortnumbers)-1; i++

} if exchangecount == 0

} return nil

}

演算法思想:外層迴圈最多隻迴圈 length - 1 次,外層迴圈執行完一次,就有乙個最大元素產生且已排好序,剩下的元素無須再和這些已排序的元素比較。
func bubblesort2(tosortnumbers int) error 

//最後乙個元素不用再排序了,因此迴圈次數為:len(tosortnumbers)-1 次

for i := 0; i < len(tosortnumbers)-1; i++

} }return nil

}

演算法思想:內層迴圈只要沒有交換,說明當前序列已經有序,直接break掉外層迴圈,排序完成,這次就大大減少了內外層迴圈執行次數。
func bubblesort3(tosortnumbers int) error 

//最後乙個元素不用再排序了,因此迴圈次數為:len(tosortnumbers)-1 次

for i := 0; i < len(tosortnumbers)-1; i++

} if exchangecount == 0

} return nil

}

第二版與第三版比較
func main() 		

*/ tosort := int

fmt.println("排序前:", tosort)

_ = bubblesort2(tosort)

// _ = bubblesort3(tosort)

fmt.println("排序後:", tosort)

fmt.printf("outer: %d, innner: %d", outer, inner)

}

第二版結果:

排序前: [1 2 3 4 5 6 7]

排序後: [1 2 3 4 5 6 7]

outer: 6, innner: 21

process finished with exit code 0

第三版結果:

排序前: [1 2 3 4 5 6 7]

排序後: [1 2 3 4 5 6 7]

outer: 1, innner: 6

process finished with exit code 0

小結:第三版的的內外層執行次數明顯大於第二版,第三版可以提高演算法效率!

交換排序 氣泡排序

交換排序 兩兩比較待排序記錄的關鍵碼,若是逆序,則交換,直到無逆序。其中最簡單的交換排序是 氣泡排序。氣泡排序 bubble sort,也叫起泡排序 不斷地比較相鄰的記錄,若是不滿足排序要求,則交換。交換時,可從前向後,也可從後向前。看乙個從前向後的排序過程 原序列 12 3 45 33 6 下標 ...

氣泡排序 交換排序

最壞情況下,直接插入排序時間複雜度為 n 最小時間代價為 n 平均時間代價為 n 附加儲存空間 乙個儲存單位 穩定性 穩定 原址性 是 緊緻性 乙個比較,三個賦值操作 特點 對於基本有序,或偶爾有幾個在有序位置附近時,效率高,只有直接插入排序和它達到一樣的效果 整體效果不如直接插入排序,因為,直接插...

交換排序 氣泡排序

1.原理 從小到大排序 存在10個不同大小的氣泡,由底至上地把較少的氣泡逐步地向上公升,這樣經過遍歷一次後,最小的氣泡就會被上公升到頂 下標為0 然後再從底至上地這樣公升,迴圈直至十個氣泡大小有序。在 氣泡排序中,最重要的思想是兩兩比較,將兩者較少的公升上去 氣泡排序最壞情況的時間複雜度是o n 2...