1 #include<iostream>
2 #include<iomanip>
3 #include<time.h>
4 using namespace std;
5 const int N=10;
6
7 void BubbleSort(int arr[], int n)
8 {
9 int i, j, t;
10 for(i=0;i<n-1;i++)
11 {
12 for(j=0;j<n-i-1;j++)
13 {
14 if(arr[j]>arr[j+1])
15 {
16 t=arr[j+1];
17 arr[j+1]=arr[j];
18 arr[j]=t;
19 }
20 }
21 }
22 }
23
24 int main()
25 {
26 int a[N], i;
27 srand(time(NULL));
28 for(i=0;i<N;i++)
29 a[i]=rand()%100;
30 for(i=0;i<N;i++)
31 cout<<setw(4)<<a[i];
32 cout<<endl;
33
34 BubbleSort(a,N);
35 for(i=0;i<N;i++)
36 cout<<setw(4)<<a[i];
37 cout<<endl;
38 }
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 10
void BubbleSort(int arr[], int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(arr[j]>arr[j+1])
{
t=arr[j+1];
arr[j+1]=arr[j];
arr[j]=t;
}
}
}
}
int main()
{
int a[N], i;
srand(time(NULL));
for(i=0;i<N;i++)
a[i]=rand()%100;
for(i=0;i<N;i++)
printf("%3d", a[i]);
printf("\n");
BubbleSort(a,N);
for(i=0;i<N;i++)
printf("%3d", a[i]);
printf("\n");
return 0;
}
算法原理

冒泡排序算法的运作如下:
-
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
-
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
-
针对所有的元素重复以上的步骤,除了最后一个。
-
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
时间复杂度
若文件的初始状态是正序的,一趟扫描即可完成排序。
所需的关键字比较次数
和记录移动次数
均达到最小值:
,
。




所以,冒泡排序最好的时间复杂度为
。
若初始文件是反序的,需要进行
趟排序。每趟排序要进行
次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:

若初始文件是反序的,需要进行




冒泡排序的最坏时间复杂度为
。

综上,因此冒泡排序总的平均时间复杂度为
。

算法的稳定性
冒泡排序是就地排序,且它是稳定的。
来源:https://www.cnblogs.com/Lee-geeker/archive/2013/06/07/3125012.html