排序演算法 氣泡排序 C語言實現

2021-09-25 10:35:57 字數 1319 閱讀 9150

氣泡排序介紹

氣泡排序(bubble sort),又稱為氣泡排序。

這是一種較簡單的排序演算法。它會遍歷若干次要排序的陣列,每次遍歷時,它都會從前往後依次比較相鄰兩個數的大小;如果前者大於後者,則兩者位置互換。由此,一次遍歷後,最大元素就在數列末尾。採用相同方法再次遍歷時,第二大的元素就被排列在最大元素前。重複此操作至整個陣列有序為止。

氣泡排序**實現

氣泡排序c實現一:

void bubble_sort(int arr, int size)

} }}

下面以陣列[5,1,3,6,2]為例,解析氣泡排序過程。

我們先分析第一趟排序:

當i = 0,j = 0時,a[0] > a[1],交換a[0]和a[1]的值;交換之後,a[0] = 1,a[1] = 5。

當i = 0,j = 1時,a[1] > a[2],交換a[1]和a[2]的值;交換之後,a[1] = 3,a[2] = 5。

當i = 0,j = 2時,a[2] < a[3],不作任何處理。

當i = 0,j = 3時,a[3] > a[4],交換a[3]和a[4]的值;交換之後,a[3] = 2,a[4] = 6。

於是,第1趟排序完之後,把陣列[5,1,3,6,2]變成了[1,3,5,2,6]。此時,數列末尾的值最大。

根據這種方法:

第2趟排序完之後,陣列[1,3,2,5,6]最後兩個數是有序的。

第3趟排序完之後,陣列[1,2,3,5,6]是有序的。

第3趟排序之後,整個陣列也就是有序的了。

氣泡排序c實現二:

通過上面對氣泡排序的分析,第3遍排序之後,資料已經是有序的了;第4趟並沒有進行資料交換。

下面我們對氣泡排序進行優化,使其效率更高一些;新增乙個標記,如果一趟遍歷中發生了交換,則標記為1,否則為0,如果一趟沒有發生交換,說明排序已完成。

void bubble_sort(int arr, int size)

} if(flag == 0)

}}

氣泡排序的時間複雜度和穩定性

氣泡排序時間複雜度

氣泡排序的時間複雜度是o(n^2)。

假設被排序的陣列中有n個數。遍歷一趟的時間複雜度是o(n),需要遍歷多少次呢?n-1次!因此,氣泡排序的時間複雜度是o(n^2)。

氣泡排序穩定性

氣泡排序是穩定的演算法,它滿足穩定演算法的定義。

演算法穩定性:假設在數列中存在a[i] = a[j],若在排序之前,a[i]在a[j]前面;並且排序之後,a[i]仍然在a[j]前面。則這個排序演算法是穩定的!

氣泡排序演算法C語言實現

氣泡排序 bubblesort 的基本概念是 依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟 首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,將最大的數放到了最後。在...

經典排序演算法 氣泡排序(C語言實現)

氣泡排序是一種較為簡單的排序演算法,其基本思想為從頭開始依次比較相鄰的兩個元素大小,將較大 較小 的元素移至右端,最終使最大 最小 的元素移至序列最後,再次重複上述過程,直到最終序列完全有序為止。例如 有一行數分別是26 10,83,56,28,66,7 說明 按照從小到大的順序進行排序,方框數為比...

氣泡排序 c語言實現

氣泡排序 排序思想 1.對於乙個長度為n的陣列,進行n 1次迴圈 2.第一次次迴圈中,先將1和2元素比較,如果元素1比元素2大,則交換其位置,接著比較元素2和元素3,以此類推,最終最大的元素排在最後一位 3.接著第二次迴圈,要排序的元素個數減少乙個 最大的已經放在最後一位 重複2的過程 4.這樣,每...