冒泡排序
冒泡排序 (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)
第二大的数字被放到了倒数第二个位置。
规律
- 每一趟都是把最大的元素放在最后面
- 轮次规律:若共有n个元素,最多要比较n-1轮次
- 每一轮的比较规律:每一轮比较的次数是上一轮的(-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;
}
}
}