冒泡排序的时间复杂度为O(n2)
长度为N的数组,需要扫描N-1(1->N-1)次,每次扫描需要比较N-i次(i表示第i次扫描),每次扫描之后,可以找出最大的一个元素并将其放到数组末尾。
时间复杂度=(N-1) + (N-2) + (N-3) + (N-3) + … + 1=(N-1)*(N-2)/2=O(n2)
可以设置一个标志位switched来减少扫描次数。每次扫描之前switched=FALSE,如果本次扫描发生了元素交换,switched就置为TRUE,下次扫描就检查switched,如果为真就继续,否则结束扫描。
C实现
#include <stdio.h>
#define TRUE 1
#define FALSE 0
void bubbleSort(int L[],int Len){
int i,j,tmp;
int switched = TRUE;
for(i=0;i<Len-1&&switched;i++){
switched = FALSE;
for(j=0;j<Len-i-1;j++){
if(L[j] > L[j+1]){
tmp = L[j];
L[j] = L[j+1];
L[j+1] = tmp;
switched = TRUE;
}
}
}
printf("扫描次数:%d",i);
}
int main(){
int L[10] = {9,8,7,6,5,4,3,0,1,2};
int i;
bubbleSort(L,10);
for(i=0;i<10;i++){
printf("%d-",L[i]);
}
getchar();
return 0;
}
python实现
#冒泡排序
def bubbleSort(L):
length = len(L)
for i in range(length-1):
for j in range(length-i-1):
if L[j] > L[j+1]:
L[j],L[j+1] = L[j+1],L[j]
if __name__ == '__main__':
l = [9,8,7,6,5,4,3,2,1]
bubbleSort(l)
print l