冒泡排序
从前往后比较两个相邻的元素。通过对待排序序列从前向后依次比较相邻的值,若发现逆序则交换,使数值较大的元素逐渐从前向后移动。共进行(数组容量-1)次排序
优化方案
冒泡排序的算法时间复杂度是O(n^2)
代码块中的注释去掉之后就会减少运算次数
定义一个标识符,如果发生了交换则把flag置为true,,然后再把flag置为false。如果没发生交换,这时!flag就是true,这就执行break;从而跳出循环。
不带优化的时候
1次排序
[5, 6, 8, 9, 25, 59, 80]
2次排序
[5, 6, 8, 9, 25, 59, 80]
3次排序
[5, 6, 8, 9, 25, 59, 80]
4次排序
[5, 6, 8, 9, 25, 59, 80]
5次排序
[5, 6, 8, 9, 25, 59, 80]
6次排序
[5, 6, 8, 9, 25, 59, 80]
带优化的时候
1次排序
[5, 6, 8, 9, 25, 59, 80]
package day14;
import java.util.Arrays;
public class BubbleSort {
static int[] arr1 = { 5, 6, 8, 9, 25, 59, 80};
static int temp;
public static void main(String[] args) {
BSort(arr1);
}
public static void BSort(int[] arr) {
//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;
// }
}
}
}