冒泡排序
来源:互联网 发布:淘宝军用匕首 编辑:程序博客网 时间: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