1.冒泡排序的思想
- 设置双重循环 i = 0; j = 0;
- 外层循环确定要排序的轮数:arr.length-1轮(倒数第二个元素排序完成时,数组已经有序了)
- 内层循环从数组的第一个位置开始,依次比较相邻的两个值,一直到到当前的数组的最后一个位置,每经过一次外层循环,下一轮比较的次数就减一,j=arr.length-i-1。
2.冒泡排序的时间复杂度O(n^2)
3.冒泡排序的优化
- 设置一个flag标记,当有一轮比较中,没有发生数据的交换时,说明当前数组已经有序,则排序完毕,直接跳出循环
4.冒泡排序的实现
package 算法.排序;
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
int[] arr = new int[8];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int)(Math.random()*100+1);
}
System.out.println("排序前的数组如下:"+Arrays.toString(arr));
bubbleSort(arr);
System.out.println("排序后的数组如下:"+Arrays.toString(arr));
}
static void bubbleSort(int[] arr){
int temp = 0;
for (int i = 0; i < arr.length-1; i++) {
boolean flag = false;
for (int j = 0; j < arr.length-i-1; j++) {
if (arr[j]>arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
flag = true;
}
}
if (!flag){
System.out.println("冒泡排序已完成,提前结束");
break;
}
}
}
}