时间复杂度 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就停止了

代码示例

  1. package com.ss;
  2. import java.util.Arrays;
  3. import java.util.Random;
  4. /**
  5. * <p>
  6. * 冒泡排序
  7. * </P>
  8. *
  9. * @author: zhangss
  10. * @since: 2021-01-04
  11. **/
  12. public class BubbleSort {
  13. /**
  14. * 冒泡排序
  15. * @param arr
  16. */
  17. public static void bubbleSort(int[] arr){
  18. for (int i = arr.length - 1; i > 0; i--) {
  19. for (int j = 0; j <= i - 1; j++) {
  20. if (arr[j] > arr[j + 1]) {
  21. swap(arr, j, j + 1);
  22. }
  23. }
  24. }
  25. }
  26. /**
  27. * 交换两个位置的值
  28. * @param arr
  29. * @param i
  30. * @param j
  31. */
  32. public static void swap(int[] arr, int i, int j) {
  33. int temp = arr[i];
  34. arr[i] = arr[j];
  35. arr[j] = temp;
  36. }
  37. /**
  38. * 对数器
  39. * 用来比较上述冒泡排序以后的顺序是否正确
  40. * @param arr1
  41. * @param arr2
  42. * @return
  43. */
  44. public static boolean comparator(int[] arr1, int[] arr2){
  45. if(arr1.length != arr2.length){
  46. return false;
  47. }
  48. Arrays.sort(arr1);
  49. for (int i = 0; i < arr1.length; i++) {
  50. if(arr1[i] != arr2[i]){
  51. System.out.println(i + "..." + arr1[i]);
  52. System.out.println(i + "..." + arr2[i]);
  53. return false;
  54. }
  55. }
  56. return true;
  57. }
  58. /**
  59. * 产生数组用来测试冒泡排序方法
  60. * @return
  61. */
  62. public static int[] getArr(){
  63. Random random = new Random();
  64. // 若电脑性能有限,生成的数组可以降低长度
  65. int length = random.nextInt(1000);
  66. int[] arr = new int[length];
  67. for(int i = 0; i < length; i++){
  68. arr[i] = random.nextInt();
  69. }
  70. return arr;
  71. }
  72. public static void main(String[] args) {
  73. // 循环测试5万次后,确定刚才写的排序没问题
  74. for (int i = 0; i < 50000; i++) {
  75. int arr1[] = getArr();
  76. int arr2[] = Arrays.copyOf(arr1, arr1.length);
  77. bubbleSort(arr2);
  78. boolean comparator = comparator(arr1, arr2);
  79. if(!comparator){
  80. System.out.println("排序失败");
  81. }
  82. }
  83. System.out.println("排序成功");
  84. }
  85. }