冒泡排序
思路分析:
把数组中相邻的两个数进行比较,如果前面的数比后面的数大,则交换两个数的位置,一轮排序之后,最大的数就会在最后面,而第二次排序只需排序前(n-1)个数据即可,这里需要注意角标越界问题
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {8, 4, 1, -1, 0, 9, 3, 5};
int temp;
// 时间复杂度为O(n^2)
for(int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) { // 为了防止 arr[j + 1] 角标越界
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
冒泡排序优化
思路分析:
当我们在循环遍历交换两个数的前后位置时,如果在某一次循环遍历没有出现数据交换的情况,即说明该数组已排序完成,即可退出冒泡排序
代码展示:
package com.monster.sort;
import java.util.Arrays;
/**
* @author Monster
* @version v1.0
* @time 03-18-2021 11:06:56
* @description:
*/
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {8, 4, 1, -1, 0, 9, 3, 5};
int temp;
// 时间复杂度为O(n^2)
for (int i = 0; i < arr.length - 1; i++) {
boolean flag = false;
for (int j = 0; j < arr.length - i - 1; j++) { // 为了防止 arr[j + 1] 角标越界
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = true;
}
}
if (!flag) {
break;
}
}
System.out.println(Arrays.toString(arr));
}
}