【7】在没有数据交换的时候,提前退出冒泡排序。
冒泡排序:只操作相邻的两个数据。空间复杂度O(1),原地排序算法。相邻两个元素大小相等时不做交换,是稳定的排序算法。
最好时只进行一次冒泡操作,最好时间复杂度O(n),最坏时需进行n次冒泡操作,为O(n2)。平均时间复杂度是O(n2)。
冒泡排序、插入排序交换(或移动)次数=逆序度=满有序度-有序度。
package array;
public class array1 {
public static void main(String[] args) {
//冒泡排序法排序
int[] a= {2,5,3,7,6,8,9,10};
int n=a.length;
for(int i=0;i<n;i++)
{
boolean flag=false;//提前退出冒泡循环的标志位
for(int j=0;j<n-i-1;j++)
{
if(a[j]>a[j+1])
{
int tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
flag=true;//表示有数据交换
}
}
if(!flag)break;//没有数据交换,提前退出
}
for(int i=0;i<n;i++)
{
System.out.print(a[i]+" ");
}
}
}