时间复杂度 O(N)
冒泡排序的时间复杂度不会随着样本的改变而改变
流程说明
https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html 此网站以动图的形式非常清楚的展示了冒泡排序的过程 [3, 5, 2, 7, 6] idx 0 1 2 3 4 第一次: 0…N-1的位置上 [0]和 [1]对比大的往后交换,[1]和[2]对比大的往后交换 一共进行n-1 次 第一次: 0…N-2的位置上 [0]和 [1]对比大的往后交换,[1]和[2]对比大的往后交换 一共进行n-2 次 第一次: 0…N-3的位置上 [0]和 [1]对比大的往后交换,[1]和[2]对比大的往后交换 一共进行n-3 次 如此一直循环直到0…1位置,即n-m=0就停止了
代码示例
package com.ss;import java.util.Arrays;import java.util.Random;/*** <p>* 冒泡排序* </P>** @author: zhangss* @since: 2021-01-04**/public class BubbleSort {/*** 冒泡排序* @param arr*/public static void bubbleSort(int[] arr){for (int i = arr.length - 1; i > 0; i--) {for (int j = 0; j <= i - 1; j++) {if (arr[j] > arr[j + 1]) {swap(arr, j, j + 1);}}}}/*** 交换两个位置的值* @param arr* @param i* @param j*/public static void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}/*** 对数器* 用来比较上述冒泡排序以后的顺序是否正确* @param arr1* @param arr2* @return*/public static boolean comparator(int[] arr1, int[] arr2){if(arr1.length != arr2.length){return false;}Arrays.sort(arr1);for (int i = 0; i < arr1.length; i++) {if(arr1[i] != arr2[i]){System.out.println(i + "..." + arr1[i]);System.out.println(i + "..." + arr2[i]);return false;}}return true;}/*** 产生数组用来测试冒泡排序方法* @return*/public static int[] getArr(){Random random = new Random();// 若电脑性能有限,生成的数组可以降低长度int length = random.nextInt(1000);int[] arr = new int[length];for(int i = 0; i < length; i++){arr[i] = random.nextInt();}return arr;}public static void main(String[] args) {// 循环测试5万次后,确定刚才写的排序没问题for (int i = 0; i < 50000; i++) {int arr1[] = getArr();int arr2[] = Arrays.copyOf(arr1, arr1.length);bubbleSort(arr2);boolean comparator = comparator(arr1, arr2);if(!comparator){System.out.println("排序失败");}}System.out.println("排序成功");}}
