冒泡排序算法

冒泡排序算法的时间复杂度是什么?

时间复杂度是O(n^2)。

 1 #include "stdafx.h"
 2 #include <iostream>
 3 using namespace std;
 4 void Swap(int &a, int &b)
 5 {
 6     int temp = a;
 7     a = b;
 8     b = temp;
 9 }
10 
11 void Bubble1(int *array, int length)
12 {
13     for (int i=length-1;i>0;--i) //首先是要比较多少趟,每一趟冒泡可以确定一个值。最后一趟只剩一个就不用比较了(所以是i>0而不是i>=0)。
14     {
15         for (int j=0;j<i;++j)
16         {
17             if (array[j]>array[j+1])  //升序(降序 < )
18             {
19                 Swap(array[j], array[j+1]);
20             }
21         }
22     }
23 }
24 
25 void Bubble2(int *array, int length)
26 {
27     for (int i=0;i < length - 1;++i) //首先是要比较多少趟,每一趟冒泡可以确定一个值。最后一趟只剩一个就不用比较了(所以是i < length - 1)。
28     {
29         for (int j=1;j < length - i;++j)
30         {
31             if (array[j-1]>array[j])  //升序(降序 < )
32             {
33                 Swap(array[j-1], array[j]);
34             }
35         }
36     }
37 }
38 
39 //设置标志位优化的及时终止版
40 void Bubble3(int *array, int length)
41 {
42     bool swapHappend;
43     for (int i=0;i < length - 1;++i) //首先是要比较多少趟,每一趟冒泡可以确定一个值。最后一趟只剩一个就不用比较了(所以是i < length - 1)。
44     {
45         swapHappend = false;
46         for (int j=1;j < length - i;++j)
47         {
48             if (array[j-1]>array[j])  //升序(降序 < )
49             {
50                 Swap(array[j-1], array[j]);
51                 swapHappend = true;
52             }
53         }
54         if (!swapHappend)
55             break;        
56     }
57 }
58 
59 int _tmain(int argc, _TCHAR* argv[])
60 {
61     int array[] = {2,9,6,3,8,5,1,4,7};
62 
63     /*Bubble1(array, 9);*/
64     Bubble2(array, 9);
65     /*Bubble3(array, 9);*/   
66 
67     for (int i=0;i<9;++i)
68         cout<<array[i]<<endl;
69 
70     getchar();
71     return 0;
72 }
原文地址:https://www.cnblogs.com/kira2will/p/3978146.html