Skip to content

Latest commit

 

History

History
32 lines (28 loc) · 898 Bytes

File metadata and controls

32 lines (28 loc) · 898 Bytes

冒泡排序

排序过程

  1. 外循环从右向左遍历
  2. 内循环从左向右遍历,排除最后一位数
  3. 如果当前的数比后一位数大,则交换

代码实现

private static void bubbleSort(int[] arr) {
  if (arr == null || arr.length < 2) return;
  int n = arr.length;
  boolean isSwap = false; // 是否发生了交换
  // 从右向左遍历
  for (int i = n - 1; i > 0; i--) {
    isSwap = false; // 重置标识
    for (int j = 0; j < i; j++) { // 每一轮冒泡,最后一位肯定是最大的数,所以排除最后一位
      if (arr[j] > arr[j + 1]) { // 右边的数比左边大,交换数据
        int temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
        isSwap = true; // 发生了数据交换
      }
    }
    if (!isSwap) { // 没有发生交换,说明已经是正序的数组了
      break;
    }
  }
}