Day26.1.冒泡排序
1.内容
-
两层循环,外层冒泡轮数,内层依次比较,时间复杂度O(n2),{实际为(n-1)*n/2},(具体参考数据结构)
-
相邻的数比较
-
一轮确定一个数的位置
-
最后一个数不用进行单独轮次的比较,因为只有一个位置剩余,所以最后一个数的位置是确定的
-
n个数需要n-1轮排序,总共进行n*(n-1)/2次比较次数
-
相邻数交换位置,需通过中间变量来交换
2.示例
public class Demo06 {
public static void main(String[] args){
//冒泡排序
int[] a={1,5,9,98,101,6,0};
sort(a);
}
//定义冒泡排序方法
public static void sort(int[] array){
for(int i=0;i<array.length-1;i++){//一轮确定一个数的位置,剩下的最后一个数无需比较,n-1次排序
for(int j=0;j<array.length-1-i;j++){//循环比较
if(array[j]>array[j+1]){//通过中间变量交换位置
int t=array[j+1];
array[j+1]=array[j];
array[j]=t;
}
}
}
System.out.println(Arrays.toString(array));
}
}
改进:
public static void sort(int[] array){
for(int i=0;i<array.length-1;i++){//一轮确定一个数的位置,剩下的最后一个数无需比较,n-1次排序
boolean flag=false;
for(int j=0;j<array.length-1-i;j++){//循环比较
if(array[j]>array[j+1]){//通过中间变量交换位置
int t=array[j+1];
array[j+1]=array[j];
array[j]=t;
flag=true;
}
}
if(flag==false){//说明某一次排序(设第X次排序)没有发生交换,说明形式上未排序好的数,实际已经排序好了
break;//X之后的排序都不用执行了
}
}
System.out.println(Arrays.toString(array));
}
减少无效排序,筛选条件为某次排序的所有比较次数都未发生位置交换。
标签:int,位置,冒泡排序,public,Day26.1,排序,array From: https://www.cnblogs.com/HomeFJ/p/16996932.html