排序思路

冒泡排序是最基础的排序算法,由于其直观性,经常作为首个介绍的排序算法。其原理为:
内循环: 使用相邻双指针 j , j + 1 从左至右遍历,依次比较相邻元素大小,若左元素大于右元素则将它们交换;遍历完成时,最大元素会被交换至数组最右边 。
外循环: 不断重复「内循环」,每轮将当前最大元素交换至 剩余未排序数组最右边 ,直至所有元素都被交换至正确位置时结束。

  • 时间复杂度 O(N^2)

冒泡排序优化

可以给每轮循环设置一个标志位,如果本次循环没有交换一个元素,说明此时数组有序,不需要排序。

  1. /**
  2. * 冒泡排序(带标志位)
  3. */
  4. public class BubbleSort {
  5. public static void main(String[] args) {
  6. int[] nums = new int[]{1,3,5,4,8,6,7,8,10,22,55};
  7. for (int i = 0; i < nums.length - 1; i++) {
  8. boolean flag = false; // 标志位
  9. for (int j = i; j < nums.length - 1; j++) {
  10. if (nums[j] > nums[j + 1]) {
  11. int temp = nums[j];
  12. nums[j] = nums[j + 1];
  13. nums[j + 1] = temp;
  14. flag = true; // 如果进行了一次交换,标志位设为true
  15. }
  16. }
  17. if (!flag) {
  18. break; // 内循环未交换任何元素,则跳出
  19. }
  20. }
  21. for (int num : nums) {
  22. System.out.print(num + " ");
  23. }
  24. }
  25. }