冒泡排序

来源:互联网 发布:淘宝军用匕首 编辑:程序博客网 时间:2024/06/08 19:49

冒泡排序

冒泡排序时间复杂度上为O(n^2)

冒泡排序三种方式,第一种也是最基本的排序:

复制代码
void bubbleSort1(int *arr,int length){    int i,j,k;    for(i=0;i<length;i++){        for(j=i+1;j<length;j++){            if(arr[i]>arr[j]){                k = arr[j];                arr[j] = arr[i];                arr[i] = k;            }        }    }}
复制代码

第二种是循环的时候,j指针从尾部开始,每次可以顺便排序其他的元素

复制代码
void bubbleSort2(int *arr,int length){    int i,j,k;    for(i=0;i<length;i++){        for(j=length-1;j>=i;j--){            if(arr[j] < arr[j-1]){                k = arr[j-1];                arr[j-1] = arr[j];                arr[j] = k;            }        }    }}
复制代码

第三种是加入一个标记为,如果一次遍历发现没有元素冒泡,那么立刻停止

复制代码
void bubbleSort3(int *arr,int length){    int i,j,k;    bool flag = true;    for(i=0;i<length && flag; i++){        flag = false;        for(j=i+1;j<length;j++){            if(arr[i] > arr[j]){                k = arr[j];                arr[j] = arr[i];                arr[i] = k;                flag = true;            }        }    }}
复制代码

测试后发现,除了正序的极端情况下,第三种的冒泡排序快一些,其他情况下的冒泡排序都是原始的最简单的方法快。

乱序情况下:

正序情况下

逆序情况下:

全部代码:

View Code

最终可以看到:

冒泡排序方法1>2>3

而从时间运行角度来说:正序情况下最快,乱序排中,逆序情况下最慢

0 0