蛮力法冒泡排序
蠻力法冒泡排序
蠻力法在冒泡排序上,比較數組中相鄰元素,如果它們是逆序的話,就交換它們的位置。重復多次以后,最終最大的元素就沉到數組最后一個位置,第二遍將第二大的元素沉下去。一直這樣做,直到 n - 1 遍以后,該數組就排好序了。
第 i (0 <= i <= n - 2) 遍冒泡排序可以用
A[0] , A[j] , A[j], … , A[n - i - 1] | A[n - i] <= … A[n - 1];
算法 BubbleSort(A [ n] )
//該算法用冒泡排序對數組 A[n] 進行排序
//輸入:一個可排序的數組 A [n]
//輸出:升序排列的數組 A [n]
for i <–0 to do
for j <-- 0 to n - 2 - i do
if A[j + 1] < A[ j ]
swap A[ j ] and A[ j + 1]
核心代碼
void BubbleSort(int a[], int n){int temp;for(int i = 0; i <= n - 2; i++){for(int j = 0; j <= n - 2 - i; j++){if(a[j + 1] < a[j]){temp = a[j];a[j] = a[j + 1];a[j + 1] = temp;}}} }例如:用蠻力法對序列89,445,68,90,29,34,17做冒泡排序
/*冒泡排序*/ #include<stdio.h> void BubbleSort(int a[], int n){int temp;for(int i = 0; i <= n - 2; i++){for(int j = 0; j <= n - 2 - i; j++){if(a[j + 1] < a[j]){temp = a[j];a[j] = a[j + 1];a[j + 1] = temp;}}}for(int i = 0; i < 7; i++)printf("%-3d", a[i]); }int main(){int a[7] = {89, 45, 68, 90, 29, 34, 81};printf("排序前的元素\n"); for(int i = 0; i < 7; i++)printf("%-3d", a[i]);printf("\n");printf("排序后的元素為\n"); BubbleSort(a, 7);return 0; }運行結果
代碼分析
時間復雜度分析:對于所有規模為 n 的數組來說,該冒泡排序的鍵值比較次數都是相同的,C( n ) = O(n2),但它的建的交換次數取決于特定的輸入。最壞情況下就是遇到降序排序的數組,這是鍵的交換次數和鍵的比較次數是相同的,C( n ) = O( n2), 綜上,因此冒泡排序總的時間復雜度為 O( n)
空間復雜度為:O(1)
冒泡排序是穩定排序,不會改變數據的大小的相對位置。
結尾
寫博客是為了一是整理所學知識,親生寫代碼的經驗,而是為了總結經典算法,三是督促自己努力,懂得越多,越知道自己知識的淺薄,四是希望和他人多多交流,有什么不對的地方大佬們多多指點
總結
- 上一篇: 什么是真正的 HTAP ?(二)挑战篇
- 下一篇: 面试官:说一下你们线上JVM是如何优化的