package com.xurong.sort;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
public class BubbleSort {
public static void main(String[] args) {
// int[] arry = {3,9,-1,10,-2};//定义一组数据用于测试
// int[] arry = {1,2,3,4,5,6,};//定义一组数据用于测试
// bubbleSort(arry);
// System.out.println("排序后的数组为:\n"+Arrays.toString(arry));
/*以下通过计算排序所耗费的时间,从而比较处几种排序的优劣*/
int[] array = new int[100000];
for(int i = 0; i < 100000; i++) {
array[i] = (int)(Math.random() * 100000);//随机生成[0-100000]之间的数
}
Date date1 = new Date();
SimpleDateFormat simpleDateFormate = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
String date1Str = simpleDateFormate.format(date1);
System.out.println("排序前的时间是=" + date1Str);
//将测试数组冒泡排序
bubbleSort(array);
Date date2 = new Date();
String date2Str = simpleDateFormate.format(date2);
System.out.println("排序后的时间是=" + date2Str);
}
/**
* 冒泡排序
* 时间复杂度为O(n^2)
* @param arry
*/
public static void bubbleSort(int[] arry) {
boolean flag = false;//用于判断是否还进行交换
for (int i = 0; i < arry.length - 1; i++) {
for (int j = 0; j < arry.length - 1 - i; j++) {
int temp = 0;//定义一个变量用于临时存储
//前面数大于后面数-用于交换
if (arry[j] > arry[j + 1]) {
flag = true;
temp = arry[j];
arry[j] = arry[j + 1];
arry[j + 1] = temp;
}
}
// System.out.println("第"+(i + 1)+"趟排序后的数组");
// System.out.println(Arrays.toString(arry) + "\n");//将数组转变为字符串输出
if(!flag) {
//该趟排序下来并没有交换,说明已经完成排序,直接免去了接下来的排序,达到程序优化的目的
break;
} else {
flag = false;
}
}
}
}
输出结果:
排序前的时间是=2021-59-03 06:59:34
排序后的时间是=2021-59-03 06:59:49