假設有n個元素,現在要把這些元素按照從小到大的順序進行排序,那麼演算法步驟如下,
從第0個元素開始,比較相鄰的兩個元素,第0個和第1個,第1個和第2個,…,第n-2個和第n-1個,比較範圍是[0, n-1],所有元素都參與比較
如果左邊的比右邊的大,就交換他們的位置,一直比較到最後乙個元素。這樣經過第一輪交換,最後乙個元素就是所有元素裡最大的
重複第1步操作,比較範圍是[0, n-2],即第n-1個元素不再參與比較
重複第1步操作,比較範圍是[0, n-3],即第n-1個和第n-2個元素不再參與比較
重複…直到比較範圍是[0],即只剩下乙個元素沒有排序,則排序結束,總共需要交換n-1輪
常規寫法
void
bubblesort
(int arr,
int len)}}
}
遞迴寫法
void
bubblesort
(int arr,
int len)
}bubblesort
(arr, len-1)
;// 進行下一輪比較,注意元素範圍
}
問:為什麼總共需要比較n-1輪?
答:因為總共有n個元素,如果n=1,不需要進行比較,如果n>1,那麼每比較一輪,就排好乙個元素,直到只有乙個元素沒有排好時,則整個排序過程就結束了,因為最後那個元素肯定是最小的。除去最後剩的那乙個元素,總共排好了n-1個元素,也就是要比較n-1輪。
氣泡排序是一種經典的排序演算法,也比較簡單。理解這個演算法只要弄清2點就可以了,一是每輪交換參與比較的元素範圍,二是總共需要進行多少輪交換。
另外,網上的例程基本都是對整形數進行排序,其實也可以對結構體或者c++裡的物件進行排序,只要結構體或c++物件裡有可以參與比較的元素就行。
氣泡排序演算法分析
氣泡排序的基本思想 對於待排序數列,依次比較相鄰元素,若順序相反,則交換位置,重複此步驟直至完成排序.以 5,4,3,2,1 來演示整個排序過程 原始序列 5,4,3,2,1 第一趟排序 4,5,3,2,1 4,3,5,2,1 4,3,2,5,1 4,3,2,1,5 第二趟排序 3,4,2,1,5 ...
氣泡排序的演算法分析
include include include pragma warning disable 4996 void bubble sort int array,int num 傳入陣列元素 int main 定義乙個int型陣列 int i bubble sort array,7 呼叫氣泡排序 for...
排序演算法 氣泡排序
一.氣泡排序的過程 公升值排序 1.將第乙個記錄的關鍵字與第二個記錄的關鍵字進行比較,若key 1 key 2 則交換。然後比較第二個與第三個,依此類推,直到第n 1個與第n個比較為止,第一趟排序完後,記錄最大的關鍵字會被排在最後面。2.將記錄的前n 1個關鍵字進行第二趟比較交換,直到前n 1個中最...