冒泡排序
思路:
从第一个数开始,依次与下一个数比较,若下一个数比它小,则发生交换。这样每一次遍历都将其中最大的数冒泡到顶端,直到所有数冒泡完成则排序完成。
时间复杂度:
最好情况一次排序就完成,O(n)复杂度;最坏情况逆序,O(n2)复杂度。平均时间复杂度为O(n2)。
代码:
1 #include<iostream> 2 using namespace std; 3 void bubble_sort(int arr[], int len) 4 { 5 for(int i = 0; i < len - 1; i++) 6 { 7 int flag=1; 8 for(int j = 0; j < len - 1 - i; j++) //0到len-1-i即为需排序的数字下标范围 9 { 10 if(arr[j] > arr[j + 1]) 11 { 12 int temp = arr[j]; 13 arr[j] = arr[j + 1]; 14 arr[j + 1] = temp; 15 flag=0; //发生了交换 16 } 17 } 18 if(flag) 19 { 20 break; //没发生交换说明排序已经完成了,可以提前退出,小优化 21 } 22 } 23 } 24 int main() 25 { 26 int arr[20]; 27 int len; 28 while(cin >> len) 29 { 30 for(int i = 0; i < len; i++) 31 { 32 cin >> arr[i]; 33 } 34 bubble_sort(arr, len); 35 for(int i = 0; i < len - 1; i++) 36 { 37 cout << arr[i] << ' '; 38 } 39 cout << arr[len - 1] << endl; 40 } 41 return 0; 42 }