總結# 前言
本文主要介紹氣泡排序演算法的原理、實現過程、演算法複雜度分析優化及總結。
氣泡排序基本思想是比較相鄰的兩組記錄,以公升序為例,如果後面記錄比前面記錄小則交換,直到遍歷到陣列第乙個元素為止,每趟遍歷找到陣列中最小的元素,與陣列第乙個元素交換
以陣列a[n]為例(公升序),排序步驟為:
1、定義乙個陣列下標i( 0 <= i < n-1),遍歷陣列元素用於交換
2、定義另乙個陣列下標j,j從末尾元素n-1往前遍歷比較
3、每找到前面元素 arr[j-1] 比當前位置元素arr[j]大就兩兩交換
以leetcode第215題,尋找陣列第k個最大元素為例 **如下:
void
swap
(int
*a,int
*b);
//元素交換
intfindkthlargest
(int
*arr,
int len,
int k)
}return arr[len - k]
;//返回排序後的第k個最大元素
}void
swap
(int
*a,int
*b)
由於內層迴圈(j從len - 1到 i),i = 0 ,執行len - 1次;i = 1,執行len - 2次,所以總執行次數為1 加到len - 1次,故時間複雜度t(n) = (1+ n-1)n/2= 1/2 *n^2,
時間複雜度為o(n^2)
對於部分有序的待排序列,例如arr = [3, 2, 5, 7, 8, 9, 12], 一趟排序後數列就有序了,但是氣泡排序仍然在內層迴圈兩兩比較,會消耗不必要的比較時間,所以優化思路是當一趟排序沒有兩兩交換後,說明陣列有序了,優化做法是採用標誌flag來判斷是否有序
**如下
void
swap
(int
*a,int
*b);
//元素交換
intfindkthlargest
(int
*arr,
int len,
int k)}}
return arr[len - k]
;//返回排序後的第k個最大元素
}void
swap
(int
*a,int
*b)
優化之後排序最好的情況(有序)時間複雜度為o(n),最壞的情況仍為o(n^2)
以上就是氣泡排序所有內容,本文對氣泡排序從原理、實現方法、演算法分析優化進行總結。
氣泡排序 排序 氣泡排序
既然寫了計組思來想去便打算把資料結構也寫下來,寫的時候總是發現看的時候無法發現的問題,受益良多。交換排序的基本思想 exchange until sorted 順序,分支,迴圈 注意偽 的熟悉 下面介紹兩種交換演算法 首先進行聯想,用乙個圖進行輔助聯想 水冒泡過程 頂部是陣列的begin,底部理解為...
氣泡排序 氣泡排序法
冒泡法是一種簡單的排序方法,它的實現非常簡單。首先對n個專案進行掃瞄,比較相領兩個專案的大小,若發現違背大小次序則進行互換,由此可以使n個專案中的最大者換到最後。然後對剩下的未排序好的專案再進行掃瞄,使它們的最大者換到表的最後。以此類推,直到將表全部排序好為止。這種排序方法,每遍掃瞄以後,都縮短了待...
選擇排序,氣泡排序,雙向氣泡排序
氣泡排序和選擇排序是最基本的排序方式,要掌握。氣泡排序重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。選擇排序每一趟從待排序的 資料元素 中選出最小 或最大 的乙個元素,順序放在已排好序的數列的...