冒泡排序的根本是对相邻元素进行比较,然后交换,每轮排序后有一个值浮上来
当某一轮排序之后,该数组已经有序,则不再进行比较,交换,这是一种优化,可以减少比较次数。
package com.wyww.bubblesort;
import java.util.Random;
/***
* 冒泡排序法,根据相邻元素进行排序
* 对相邻元素进行比较,若需要交换则进行交换
*/
public class BubbleSort {
public static void main(String[] args) {
//1、生成要排序的数组
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = new Random().nextInt(100);
}
System.out.println("排序前:");
for (int i : arr) {
System.out.print(i+"\t");
}
System.out.println();
//假设数组是无序的,对排序进行优化,若在某一次排序比较之后已经有序,则后面不再进行比较
boolean isSorted = true;
//2、冒泡排序法
for (int i = 0; i < arr.length-1 && isSorted; i++) {
isSorted = false;
for (int j = 0; j < arr.length-1-i; j++) {
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
//如果有发生比较,则仍是无序
isSorted = true;
}
}
}
//3、输出已排序的数组
System.out.println("排序后:");
for (int i : arr) {
System.out.print(i+"\t");
}
}
}
优化前后比较,比较次数少了4次,从第六次开始已经有序,故后面不再比较判断
优化前
排序前:
2 45 16 95 4 53 62 23 65 56
2 16 45 4 53 62 23 65 56 95
2 16 4 45 53 23 62 56 65 95
2 4 16 45 23 53 56 62 65 95
2 4 16 23 45 53 56 62 65 95
2 4 16 23 45 53 56 62 65 95
2 4 16 23 45 53 56 62 65 95
2 4 16 23 45 53 56 62 65 95
2 4 16 23 45 53 56 62 65 95
2 4 16 23 45 53 56 62 65 95
排序后:
2 4 16 23 45 53 56 62 65 95
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
优化后
排序前:
2 45 16 95 4 53 62 23 65 56
2 16 45 4 53 62 23 65 56 95
2 16 4 45 53 23 62 56 65 95
2 4 16 45 23 53 56 62 65 95
2 4 16 23 45 53 56 62 65 95
2 4 16 23 45 53 56 62 65 95
排序后:
2 4 16 23 45 53 56 62 65 95