冒泡排序(Bubble Sort)是一种简单的排序算法,它的基本思想是通过不断交换相邻的元素将未排序的最大(或最小)元素逐渐“浮”到数组的末尾(或开头)。
思路
具体来说,冒泡排序的算法步骤如下:
- 从数组的第一个元素开始,依次比较相邻的两个元素,如果前一个元素比后一个元素大,则交换它们的位置。
- 继续向后比较相邻的两个元素,直到比较到倒数第二个元素为止。此时,数组的最后一个元素应该是未排序中的最大(或最小)元素。
- 重复步骤1和步骤2,每次将未排序中的最大(或最小)元素“浮”到数组的末尾(或开头),直到所有元素都已排序。
使用了两层循环,外层循环控制排序的趟数,内层循环控制每一趟排序的比较次数。如果相邻的两个元素大小关系不符合要求,就进行交换。最终,通过多趟排序,可以将数组按照从小到大(或从大到小)的顺序排列。
对于某些输入数据,冒泡排序只需要经过一部分排序就可以完成,可以记录最后一次交换的位置,来减少比较的次数。
需要注意的是,冒泡排序的时间复杂度为 O(n^2),因此在处理大规模数据时,它的性能可能会受到影响。
package com.xin.swapsort;
/**
* @author Hu·YX
* @Description 冒泡排序
* @Date 2023/04/18
*/
public class BubbleSort {
public static void bubbleSort(int[] arr) {
int n = arr.length;
int k = n - 1;
for (int i = 0; i < n - 1; i++) {
boolean flag = false;
int last = k;
for (int j = 0; j < last; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = true;
k = j;
}
}
if (! flag) {
break;
}
}
}
}