冒泡排序的优化

来源:互联网 发布:linux cp 文件夹 编辑:程序博客网 时间:2024/05/16 14:57

冒泡排序不用多说,这边给出一个冒泡排序的一个优化的算法。
类似于{2,1,3,4,5,6}这样的数组,第一次交换之后,后面的比较完全是在浪费时间,因为已经有序了,无需我们再进行排序,所以这部分我们要进行优化。
直接上代码

    int temp;        boolean flag=true;//设置一个flag        for(int i=0;i<a.length-1&&flag;i++){//在判断条件里面加入这个flag,flag为true说明还未有序,为false后面循环全部不执行            flag=false;//每次设为false,如果后面flag没变,还是false,说明没发生交换,已经有序            for(int j=0;j<a.length-1-i;j++){                if(a[j]>a[j+1]){                    temp=a[j];                    a[j]=a[j+1];                    a[j+1]=temp;                    flag=true;//这里如果发生了交换,说明还未有序,flag为true,                }            }        }

当最好情况的时候,冒泡排序的时间复杂度是O(n)