抽象理解就像是,像泡泡一样把大的往后冒
话不多说直接上代码
public static void sortwin(int a[]){
int zhuan=0;
// 标记后面一轮是否有过交换
boolean T=false;
// 所有论
for (int j = 0; j <a.length-1; j++) {
// 一轮循环
for (int i = 0; i <a.length-1-j ; i++) {
if (a[i]>a[i+1]){
T=true;
zhuan=a[i];
a[i]=a[i+1];
a[i+1]=zhuan;
}
}
if (!T){
// 如果没有交换那证明已经排序完成
break;
}else{
// 重置
T=false;
}
}
System.out.println(Arrays.toString(a));
}
思路就是:
(1)外循环一共进行数组大小-1次循环(每循环一次排序一次)
(2)内循环每一次排序次数都在逐渐减小,(因为最大值已经在最后)
优化:如果发现某次排序一次交换都没有,那这个就是排序好的
测试看速度:
int a[] = new int[80000];
for (int i = 0; i <a.length; i++) {
a[i] = (int) (Math.random() * 800000);
}
// 测试
Date d1 = new Date();
SimpleDateFormat s = new SimpleDateFormat("YY-MM-DD HH:mm:ss:SSS");
String s1 = s.format(d1);
System.out.println("排序前的时间;" + s1);
// 普通
// sort(a);
// 优化
System.out.println("优化后");
sortwin(a);
Date d2 = new Date();
String s2 = s.format(d2);
System.out.println("优化排序后时间;" + s2);