[C]冒泡排序

来源:互联网 发布:在线选片系统源码程序 编辑:程序博客网 时间:2024/04/29 10:11

冒泡排序的时间复杂度为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 0void 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
0 0
原创粉丝点击