排序演算法 氣泡排序

2021-09-29 18:59:22 字數 1225 閱讀 4303

氣泡排序是一種非常容易理解也十分簡單的排序方法

其原理為:

依次比較相鄰兩元素的大小,若後乙個元素小於前乙個元素,則交換兩者位置(公升序),直到最後乙個元素為最大元素,然後從首元素再次重複相同步驟,直到全部排序完畢

時間複雜度o(n2)

**實現

最簡單的寫法是下面這種

void

bubblesort

(int num)

}}}

我們這一段**不難看出來,總共需要便利n次,每次便利n-1個元素,但實際上隨著排序過程的進行,後面的元素都已經排序完畢的狀態,是不需要每次都遍歷到最後的,而且這還是最壞情況,也可能在我們進行完n次排序之前整個陣列就已經排序完畢了。

因此我們可以優化一下,設定乙個標誌用來判斷一次迴圈遍歷後是否存在未排序的資料,同時對於已經排序的資料,我們也不再遍歷

void

bubblesort

(int num,

int length)}}

}

這樣一來,效率就可大大提高

但有些時候我們可能只需要對陣列中的某一段元素進行排序,而不需要排序所有的內容,所以我們可以過載乙個方法

void

bubblesort

(int num,

int begin,

int end)}}

}

這段**裡我們發現第一層迴圈的方式變了

for(int i = end; i > begin + 1 && isloop; i--)1

我們變成了從後向前的便利方式

其實這是因為第一層迴圈的目的在於確定總共需要進行的遍歷的次數,而他的迴圈方向其實無所謂,只要他所確定的迴圈次數正確即可,這裡之所有要從後向前迴圈,是為了滿足內層迴圈的要求。

我們知道,內層迴圈的迴圈終點隨著外層迴圈的進行每都會自減,這是為了提高效率,因為每一次完全遍歷都會有乙個元素被排到後面,也就是說從尾部開始向前的 i 個元素都是排好序的,所以我們內層就不需要再次遍歷他們,但是這是建立在 i 是從零開始計數的基礎上的。如果我們指定排序的開始和結束位置,就不能用以前的方法,因為 i 不是從零開始的,以 i 做為已排好序的元素個數自然是不對的,所以我們令 i 從指定元素段的尾部開始向前,每次遍歷拍好乙個元素,i 所指示的尾部位置便前移一位,這樣就可以直接利用 i 來作為內層迴圈的終止條件了

排序演算法 氣泡排序

一.氣泡排序的過程 公升值排序 1.將第乙個記錄的關鍵字與第二個記錄的關鍵字進行比較,若key 1 key 2 則交換。然後比較第二個與第三個,依此類推,直到第n 1個與第n個比較為止,第一趟排序完後,記錄最大的關鍵字會被排在最後面。2.將記錄的前n 1個關鍵字進行第二趟比較交換,直到前n 1個中最...

排序演算法 氣泡排序

從基礎重新抓起。氣泡排序 每次從陣列頭到尾選出最大或者最小的,排到尾部或者頭部。以排序結果從小到大為例 每次從陣列中把最大的調換到末尾。eg.元素個數 count,需要找count 1次 外迴圈,最後一次不用再做比較了 每次從頭到末尾沒有確定的資料中找最大的 內迴圈 做法就是比較相鄰兩個元素的大小,...

排序演算法 氣泡排序

排序演算法是處理資料最基礎的演算法,掌握各種排序演算法有利以後遇到資料時的處理。首次學習,先學習氣泡排序。氣泡排序原理 對一組待排序資料x1,x2,x3,x4,x5,x6,x7.xn,氣泡排序演算法指標 這裡的指標並不是實際的指標,只是為方便而假象的乙個類似指標的東西 從第乙個資料開始,與其後面的乙...