:冒泡排序
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
package com.atguigu.sort;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
/* 冒泡排序 */
public class BubleSort {
public static void main(String[] args) {
// int arr[] = { 3, 9, -1, 10, 20 };
int arr[] = { 1, 2, 3, 4, 5 };
System.out.println("初始的数组");
System.out.println(Arrays.toString(arr));
//冒泡排序
bubleSort(arr);
System.out.println("冒泡排序后");
System.out.println(Arrays.toString(arr));
//测试冒泡排序的速度(O(n^2)),给80000个数据
System.out.println("耗时测试:冒泡排序的速度(O(n^2)),给80000个数据");
timeSort();
/*
* // 第二次排序,就是将第二大的数排在倒数第二 for (int j = 0; j < arr.length - 2; j++) { if (arr[j]
* > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } }
* System.out.println("第二次排序后的数组"); System.out.println(Arrays.toString(arr));
*
* // 第三次排序,就是将第三大的数排在倒数第三 for (int j = 0; j < arr.length - 3; j++) { if (arr[j]
* > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } }
* System.out.println("第三次排序后的数组"); System.out.println(Arrays.toString(arr));
*
* // 第四次排序,就是将第四大的数排在倒数第四 for (int j = 0; j < arr.length - 4; j++) { if (arr[j]
* > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } }
* System.out.println("第四次排序后的数组"); System.out.println(Arrays.toString(arr));
*/
}
//耗时测试
public static void timeSort() {
//测试冒泡排序的速度(O(n^2)),给80000个数据
//创建一个80000个随机数的数组
int[] arr = new int[80000];
for(int i=0;i<80000;i++) {
arr[i] = (int)(Math.random()*8000000);//生成一个【0,8000000】数
}
Date data1 = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date1Str = simpleDateFormat.format(data1);
System.out.println("八万个随机数据-排序前的时间是: "+date1Str);
bubleSort(arr);
Date data2 = new Date();
String date2Str = simpleDateFormat.format(data2);
System.out.println("八万个随机数据-排序后的时间是: "+date2Str);
}
//冒泡排序
public static void bubleSort(int[] arr) {
// 冒泡排序,就是将最大的数排在最后 O(n^2)
int temp = 0;// 临时变量
boolean flag = 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;
}
}
// System.out.println("第" + (i + 1) + "次冒泡排序后的数组");
// System.out.println(Arrays.toString(arr));
if (!flag) {// 在一趟排序中,一次交换都没有发生
break;
} else {
flag = false;// 重置flag!!!,进行下次判断
}
}
}
}