冒泡排序

思路:

  从第一个数开始,依次与下一个数比较,若下一个数比它小,则发生交换。这样每一次遍历都将其中最大的数冒泡到顶端,直到所有数冒泡完成则排序完成。

时间复杂度:

  最好情况一次排序就完成,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 }
posted @ 2018-12-03 20:59  Piccolo_Devil  阅读(145)  评论(0编辑  收藏  举报