冒泡排序

冒泡排序 (Bubble Sort)

冒泡排序是一种简单的交换排序算法。

原理

冒泡排序的每一趟都需要从第一位开始进行相邻的两个数的比较,将较大的数放在后面,比较完毕之后向后挪一位继续比较下面两个相邻的数的大小关系,重复此步骤,直到最后一个还没归位的数。

示例:对数组 [3, 13, 8, 11, 6, 7] 进行升序处理

初始排序

   3→13→8→11→6→7
 ( 0    1    2   3    4   5)

从下标为0的元素3开始排序,相邻的两个数之间比大小:

  • 3比13小,位置不会发生改变
  • 13比8大,13与8交换位置
  • 此时处于下标为2的元素是已经交换位置的13而非8
  • 13比11大,13与11交换位置
  • 13比6大,再次交换位置

由此第一趟遍历结束以后,我们得到下面排序的数组:
3→8→11→6→7 13
( 0 1 2 3 4 5)
经过一次遍历以后,最大的数字13被排序到了最后一个位置。在用同样的方法进行第二趟排序后,我们可以得到以下排序的数组:
3→8→6→7 11 13
( 0 1 2 3 4 5)
第二大的数字被放到了倒数第二个位置。

规律

  1. 每一趟都是把最大的元素放在最后面
  2. 轮次规律:若共有n个元素,最多要比较n-1轮次
  3. 每一轮的比较规律:每一轮比较的次数是上一轮的(-1)次

代码实现

// 至少需要两个变量参与编码,一个变量控制轮次,另一个变量控制轮次中比较的次数
for (int i = 0; i < arr.length; i++) { // 外层for循环控制轮次
    for (int j = 0; j < arr.length - 1 - i; j++) { // 内层for循环控制轮次中比较的次数
        if (arr[j] > arr[j + 1]) {
            int temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
        }
    }
}
  
posted @ 2024-08-01 20:21  白白最爱小星星  阅读(12)  评论(1编辑  收藏  举报