冒泡排序(Bubble Sorting)的基本思想是:通过对待 排序序列从前向后(从下标较小的元素开始),依次比较 相邻元素的值,若发现逆序则交换,使值较大 的元素逐渐从前移向后部,就象水底下的气泡一样逐渐 向上冒。
小结:
1:大循环次数 数组大小-1 次
2:每次大循环内小循环次数依次减一m,从 数组大小-1 次 开始
3:优化:如果某次大循环没有交换,则后面的大循环可以省略
4:第一次循环会选出最大的数据,所有后面第二次大循环内小循环次数减一,后面依 次类推
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
int arr[] = {3, 9, -1, 10, 20};
System.out.println("排序前:"+Arrays.toString(arr));
int[] bubbleSort = bubbleSort(arr);
System.out.println("排序后:"+Arrays.toString(bubbleSort));
}
public static int[] bubbleSort(int[] arr) {
int temp = 0;
boolean flag = false; //true结束大排序,false继续大排序
//大循环,
for (int i = 0; i < arr.length - 1; i++) {//大循环次数
//小循环
for (int j = 0; j < arr.length - 1 - i; j++) {
//如果前面的数大于后面的数就交换
if (arr[j] > arr[j + 1]) {
flag = true;
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
// 优化
//某次大循环没有一次交换
if (!flag) {
break;
} else {
flag = false; //重置判断下一次排序
}
}
return arr;
}
}
说明:冒泡排序时间复杂度为n^2
测试排序80000条数据时间:9秒
int arr2[] = new int[80000];
for (int i=0;i<80000;i++){
arr2[i]=(int)(Math.random()*800000);
}
Date date1 = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
String d1 = format.format(date1);
System.out.println("排序前:"+d1);
bubbleSort(arr2);
Date date2 = new Date();
String d2 = format.format(date2);
System.out.println("排序后:"+d2);