冒泡排序主要思想是比较前后两个元素的大小如果a[i]>a[i+1]则交换两个元素的值
import java.util.Random;
public class SortTest {
static int a[] = new int[100000];
static{
for (int i = 0; i < 100000; i++) {
Random random = new Random(100000);
a[i] = random.nextInt();
}
}
public static void main(String[] args) {
long t1 = System.currentTimeMillis();
SortTest.MaoPao1();
System.out.println("排序1执行时间:");
System.out.println(System.currentTimeMillis()-t1);
long t2 = System.currentTimeMillis();
SortTest.MaoPao2();
System.out.println("排序2执行时间:");
System.out.println(System.currentTimeMillis()-t2);
long t3 = System.currentTimeMillis();
SortTest.MaoPao3();
System.out.println("排序3执行时间:");
System.out.println(System.currentTimeMillis()-t3);
}
/**
* 冒泡排序1
*
*/
public static void MaoPao1(){
for (int i = 0; i < a.length ; i++) {
for (int j = i+1; j <a.length ; j++) {
if (a[i]>a[j]){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
// System.out.println("第"+i+"次执行之后的数据");
// for (int z = 0; z < a.length; z++) {
// System.out.print(a[z]+" ");
// }
// System.out.println("");
}
}
/**
* 冒泡排序2
*/
public static void MaoPao2(){
for (int i = 0; i < a.length-1; i++) {
for (int j = 0; j <a.length-1 ; j++) {
if(a[j]>a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
// System.out.println("第"+i+"次执行之后的数据");
// for (int z = 0; z < a.length; z++) {
// System.out.print(a[z]+" ");
// }
// System.out.println("");
}
}
/**
* 冒泡排序3
* 思想:找到一个临界点,该临界点之后的元素全部都是有序的
* 推荐用这种,效率比较高
*/
public static void MaoPao3(){
int flag = a.length-1;
while(flag > 0){
int num = flag;
flag=0; // 每次初始化临界点
for (int i = 0; i < num; i++) {
if(a[i]>a[i+1]){
int tmp = a[i];
a[i] = a[i+1];
a[i+1] = tmp;
flag = i;
}
}
}
}
}