冒泡排序法是最常用的暴力遍历法,采用遍历所有的数并与之比较进行排序,时间复杂度为On(2),如下是测试用例:
package com.starmoral16;
//经典冒泡排序法的实现public class App {
public static void main(String[] args) {
int i,j,tmp;
//测试用例 int[] data={71,52,43,34,57};
System.out.println("====冒泡排序法:====");
System.out.println("\n====输出原始数据:====");
for (i=0;i
System.out.print(data[i]+"\t");
}
System.out.println();
for (i=data.length-1;i>0;i--){
for(j=i-1;j>=0;j--){
//开始交换 if(data[i]>data[j]){
tmp=data[i];
data[i]=data[j];
data[j]=tmp;
}
}
System.out.println("===每次比较的结果:===");
for(int k=0;k
System.out.print(data[k]+"\t");
}
System.out.println();
}
System.out.println("====最终结果:====");
for (i=0;i
System.out.print(data[i]+"\t");
}
System.out.println();
}
}
运行结果:
由于大部分时侯,在遍历的中间就已经排序好了,但算法仍会执行下去遍历完所有的元素,我们可以对该方法进行改进,在遍历的时候做一个标记,当产生交换时,标记变化,此时排序没有完成,当标记不变时,证明排序已经完成,直接退出算法,排序结束。
package com.starmoral16;
public class App01 {
public static void main(String[] args) {
int[] data={71,52,43,34,57,66};
System.out.println("====原始数据:====");
for (int i=0;i
System.out.print(data[i]+"\t");
}
System.out.println();
int temp,i;
for (i =0; i
//做标记,每次初始化为0
int flag=0;
for(int j=i;j
if(data[i]>data[j]){
temp=data[i];
data[i]=data[j];
data[j]=temp;
//标记变化,排序未完成,继续
flag++;
}
}
if(flag==0){
break;
}
System.out.println("====这是第"+(i+1)+"次交换====");
for (int k=0;k
System.out.print(data[k]+"\t");
}
System.out.println();
}
System.out.println();
System.out.println("====结果为:====");
for (i=0;i
System.out.print(data[i]+"\t");
}
}
}
运行结果:
当排序的数据量非常大的时候,可提时终止进程,有很大的帮助。