時隔許久,重溫氣泡排序,還是打算記錄下。
氣泡排序重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果順序(如從大到小、首字母從z到a)錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。
比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。
對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。一輪排序下來後,最後的元素會是最大的數。
針對所有的元素重複以上的步驟,除了最後乙個。
持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
假設有一組資料,在排序前的順序為:[86, 54, 87, 21, 3]。那麼完整的排序過程如下:
第一輪排序
54,86,87,21,3
54,86,87,21,3
54,86,21,87,3
54,86,21,3,87
經過第一輪排序,最大的數87已經沉到最底部。
第二輪排序
54,86,21,3,87
54,21,86,3,87
54,21,3,86,87
經過第二輪排序,第二大的數86也沉到了底部。
第三輪排序
21,54,3,86,87
21,3,54,86,87
第四輪排序
3,21,54,86,87
至此,經過四輪排序,原陣列已實現公升序排序。
根據分解過程,會發現,每經過一輪排序,交換的次數就會減少一次。排序的次數又恰好是陣列長度 - 1。
根據上面的分析可以得出如下規律:
所需排序次數 = 元素個數 - 1
每次排序需要交換的次數 = 元素個數 - 當前排序的輪數
因為需要多次處理,肯定要使用到迴圈結構。剩下要考慮的就是判斷誰是外層迴圈,誰是內層迴圈。
根據規律可知,先需要推斷出排序次數,才能推斷出每次排序時所需要交換的次數,故排序次數迴圈為外層迴圈,而交換次數迴圈為內層迴圈。
由此,可得到如下**:
vectorbubblesort(vector& arr) }}
return arr;
}
氣泡排序 排序 氣泡排序
既然寫了計組思來想去便打算把資料結構也寫下來,寫的時候總是發現看的時候無法發現的問題,受益良多。交換排序的基本思想 exchange until sorted 順序,分支,迴圈 注意偽 的熟悉 下面介紹兩種交換演算法 首先進行聯想,用乙個圖進行輔助聯想 水冒泡過程 頂部是陣列的begin,底部理解為...
氣泡排序 氣泡排序法
冒泡法是一種簡單的排序方法,它的實現非常簡單。首先對n個專案進行掃瞄,比較相領兩個專案的大小,若發現違背大小次序則進行互換,由此可以使n個專案中的最大者換到最後。然後對剩下的未排序好的專案再進行掃瞄,使它們的最大者換到表的最後。以此類推,直到將表全部排序好為止。這種排序方法,每遍掃瞄以後,都縮短了待...
選擇排序,氣泡排序,雙向氣泡排序
氣泡排序和選擇排序是最基本的排序方式,要掌握。氣泡排序重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。選擇排序每一趟從待排序的 資料元素 中選出最小 或最大 的乙個元素,順序放在已排好序的數列的...