[C語言] 交換排序之冒泡排序的特性及實現算法
一、算法特性數組
冒泡排序是一種簡單、穩定的交換排序方法,屬於最爲基礎的排序方法之一。測試
其時間複雜度最好狀況爲O(n)、最差與平均狀況爲O(n²),空間複雜度爲O(1)。ui
二、算法思路spa
以升序排序爲例,比較兩個相鄰的數,當後者大於前者時,兩者交換;當後者小於等於前者時,繼續檢索。每交換一輪都能將未排序序列中的最大值交換至未排序序列尾,成爲已排序序列頭。同時每一輪交換結束後下一輪比較次數-1,當比較次數爲0時排序完成。code
三、實現代碼blog
1 #include <stdio.h> 2 #include <stdbool.h> 3 4 // 冒泡排序:相鄰兩個元素進行比較,把大的放後面小的放前面,一輪完整的比較以後,最大值放在末尾 5 void bubble_sort(int arr[],int len) 6 { 7 // 第i次冒泡,把當前最大值放到arr[len-i] 8 for(int i= 0; i<len; i++) 9 { 10 bool flag = false; 11 for(int j=1; j<len-i; j++) 12 { 13 if(arr[j] < arr[j-1]) 14 { 15 int tmp = arr[j]; 16 arr[j] = arr[j-1]; 17 arr[j-1] = tmp; 18 flag = true; // 表示該次完整的循環有交換位置 19 } 20 } 21 // 全部的相鄰元素都已經有序,表明整個數組有序,不須要再進行排序 22 if(flag == false) 23 { 24 break; 25 } 26 } 27 } 28 29 void travel(int arr[],int len) 30 { 31 for(int i=0;i<len;i++) 32 { 33 printf("%d ",arr[i]); 34 } 35 printf("\n"); 36 } 37 38 int main() 39 { 40 int arr[] = {53,82,9,233,43,14,55,9,4,67}; 41 int len = sizeof(arr)/sizeof(arr[0]); 42 43 travel(arr,len); 44 bubble_sort(arr,len); 45 travel(arr,len); 46 47 /* travel(arr,len); 48 quick_sort(arr,len); 49 travel(arr,len);*/ 50 51 return 0; 52 }
四、測試結果排序