冒泡排序不用多说,这边给出一个冒泡排序的一个优化的算法。
类似于{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)