冒泡排序
每次此循环确定未排序的数组的最大值(每轮遍历固定一个元素),出现逆序交换元素,通过比较元素的大小,将较大的数依次交换到最后面。(或者每次寻找最小值,依次交换到最前边)。
复杂度分析: 时间复杂度O(N^2),空间复杂度O(1)。
(图片来自CSDN博主Zandz_)
public class BubbleSort {
public static void bubbleSort(int[] arr) {
int len = arr.length;
for (int i = 0; i < len - 1; i++) {
boolean flag = true;
for (int j = 0; j < len - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = false;
}
}
//如果不需要交换位置,说明已经有序
if (flag) {
break;
}
}
}
}
最后推荐一个学习算法的网站,里面可以查看各种算法的动画与步骤讲解: visualgo.net/en