若对
n
n
n个元素进行排序,我们需要
n
−
1
n-1
n−1次比较,所以第
k
k
k次比较需要进行
n
−
k
n-k
n−k次比较。排序算法通过以数据对象的两两比较作为关键,所以可以得出,冒泡排序需要进行的比较次数为:
(
n
−
1
)
+
(
n
−
2
)
+
.
.
.
+
1
=
n
∗
(
n
−
1
)
/
2
(n-1) + (n-2) + ... + 1 = n*(n-1) / 2
(n−1)+(n−2)+...+1=n∗(n−1)/2,因此冒泡排序的时间复杂度为
O
(
n
2
)
O(n^2)
O(n2)。
比如对序列{4,6,5,1,3,2}冒泡排序,如下图所示。
冒泡排序算法
voidbubbleSort(int data[],int n)/*冒泡排序*/{int i,j,tag=1;/*用tag表示排序中的是否交换过元素*/int temp;for( i =1; tag && i < n; i++){/*i用于计算趟数,最多n-1趟*/
tag =0;for( j =0; j < n-i; j++){if(data[j]>data[j+1]){/*如果前一个元素大于后一个元素,交换元素*/
temp=data[j];
data[j]=data[j+1];
data[j+1]=temp;
tag=1;}}}}
完整代码
#include<stdio.h>#include<stdlib.h>voidbubbleSort(int data[],int n)/*冒泡排序*/{int i,j,tag=1;/*用tag表示排序中的是否交换过元素*/int temp;for( i =1; tag && i < n; i++){/*i用于计算趟数,最多n-1趟*/
tag =0;for( j =0; j < n-i; j++){if(data[j]>data[j+1]){/*如果前一个元素大于后一个元素,交换元素*/
temp=data[j];
data[j]=data[j+1];
data[j+1]=temp;
tag=1;}}}}intmain(){int data[6]={4,6,5,1,3,2};bubbleSort(data,6);printf("the result of the bubbleSort:\n");for(int i =0; i <6; i++){printf("%d ",data[i]);}printf("\n");system("pause");return0;}