【排序算法】冒泡排序
1 前言
今天把排序的几个算法过一下,这节我们看一下冒泡排序,简单的来说就是相邻两个两两交换,我们看示例。
2 代码示例
/** * 冒泡排序 * 相邻两个逐步交换,每轮选出一个最大的 * 假设待排序的数量为:n * 考虑的两点: * 1、外层循环,那要进行 n-1 轮,即可排完 所以外层的循环是 1 -> n - 1 * 2、内层循环,始终是从0开始,到 n-轮数-1 因为比较的时候比较的是 j、j+1已经把该轮最后一个包含了所以减1 * 所以内层的循环时 0 -> n-轮数-1 由于外层循环刚好是1开始 所以就是 0 -> n - i * @param arr */ public static void bubbleSort(int[] arr) { // 轮数 for (int i = 1; i < arr.length; i++) { // 内存相邻比较交换位置 for (int j = 0; j < arr.length - i; j++) { // 升序,大的往后放 if (arr[j] > arr[j+1]) { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } } public static void main(String[] args) { int[] arr = IntStream.generate(() -> ThreadLocalRandom.current().nextInt(10000)).limit(10000).toArray(); System.out.println("排序前:" + Arrays.stream(arr).mapToObj(String::valueOf).collect(Collectors.joining(","))); bubbleSort(arr); System.out.println("排序后:" + Arrays.stream(arr).mapToObj(String::valueOf).collect(Collectors.joining(","))); }
3 小结
有写的不对的地方,欢迎指正哈。