排序思路
冒泡排序是最基础的排序算法,由于其直观性,经常作为首个介绍的排序算法。其原理为:
内循环: 使用相邻双指针 j , j + 1 从左至右遍历,依次比较相邻元素大小,若左元素大于右元素则将它们交换;遍历完成时,最大元素会被交换至数组最右边 。
外循环: 不断重复「内循环」,每轮将当前最大元素交换至 剩余未排序数组最右边 ,直至所有元素都被交换至正确位置时结束。
- 时间复杂度 O(N^2)
冒泡排序优化
可以给每轮循环设置一个标志位,如果本次循环没有交换一个元素,说明此时数组有序,不需要排序。
/**
* 冒泡排序(带标志位)
*/
public class BubbleSort {
public static void main(String[] args) {
int[] nums = new int[]{1,3,5,4,8,6,7,8,10,22,55};
for (int i = 0; i < nums.length - 1; i++) {
boolean flag = false; // 标志位
for (int j = i; j < nums.length - 1; j++) {
if (nums[j] > nums[j + 1]) {
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
flag = true; // 如果进行了一次交换,标志位设为true
}
}
if (!flag) {
break; // 内循环未交换任何元素,则跳出
}
}
for (int num : nums) {
System.out.print(num + " ");
}
}
}