冒泡排序是一個簡單的排序演算法。這個排序演算法是基於比較演算法,其中每對相鄰元件的比較和元素,如果它們不按順序則交換位置。這個演算法是不適合大的數據集,它平均值和最壞情況的複雜性是O(n2),其中n是專案的排位。
演算法
我們假定列表是n個元素的陣列。我們進一步假設 swap函數,交換給定數組元素的值。
begin BubbleSort(list) for all elements of list if list[i] > list[i+1] swap(list[i], list[i+1]) end if end for return list end BubbleSort
偽代碼
我們觀察演算法,冒泡排序比較每對數組元素,除非整個陣列完全是昇冪排列。這可能會導致幾個複雜的問題,如果數組不需要更多的交換,因為所有的元素都已經昇冪順序。
為了緩解這個問題,我們用換一個的標誌變數,它會幫助我們,看是否有交換的發生與否。如果沒有交換的發生,即數組不需要更多的處理進行排序,它會跳出迴圈。
氣泡排序演算法的偽代碼可寫成如下 -
procedure bubbleSort( list : array of items ) loop = list.count; for i = 0 to loop-1 do: swapped = false for j = 0 to loop-1 do: /* compare the adjacent elements */ if list[j] > list[j+1] then /* swap them */ swap( list[j], list[j+1] ) swapped = true end if end for /*if no number was swapped that means array is sorted now, break the loop.*/ if(not swapped) then break end if end for end procedure return list
實現
還有一個問題,我們並沒有在原來的演算法及其簡易偽地址,也就是說,在每次迭代後的最高值,位於數組的結尾。所以,下一次迭代需要不包括已排序的元素。為了這個目的,在我們的實現中限制了內迴圈,以避免已排序值。
要查看C編程語言冒泡排序的實現,請點擊這裏
上一篇:
二進位搜索/查找程式(C語言)
下一篇:
冒泡排序演算法實例程式(C語言)