1、基本介绍

冒泡排序(Bubble Sorting)的基本思想是:通过对待
排序序列从前向后(从下标较小的元素开始),依次比较
相邻元素的值,若发现逆序则交换,使值较大
的元素逐渐从前移向后部,就象水底下的气泡一样逐渐
向上冒。

因为排序的过程中,各元素不断接近自己的位置,**如果一趟比较下
来没有进行过交换,就说明序列有序**,因此要在排序过程中设置
一个标志flag判断元素是否进行过交换。从而减少不必要的比较。(这里说的优化,可以在冒泡排序写好后,在进行)**

图片.png

2、源码

  1. package com.study.sort;
  2. import java.util.Arrays;
  3. public class BubbleSort {
  4. public static void main(String[] args) {
  5. //定义一个数组
  6. int[] arr = { -1,-2,9,20,10};
  7. int temp = 0;//定义一个临时变量
  8. boolean flag = false;//标识变量,表示是否进行过交换
  9. for (int i = 0; i < arr.length-1; i++) {
  10. //判断前面的数是否比后面的数大
  11. for (int j = 0; j < arr.length - 1 -i; j++) {
  12. if (arr[j]>arr[j+1]){
  13. flag = true;
  14. temp = arr[j];
  15. arr[j] = arr[j+1];
  16. arr[j+1] = temp;
  17. }
  18. }
  19. System.out.println("第"+(i+1)+"躺排序结果:"+ Arrays.toString(arr));
  20. if(!flag){//在一趟排序中一次交换都没发生
  21. break;
  22. }else {
  23. flag = false;//重置flag,进行下次判断
  24. }
  25. }
  26. }
  27. }

3、运行结果

图片.png

3、计算排序算法的时间复杂度

O(n^2)
**

3.1、源码

  1. package com.study.sort;
  2. import java.util.Arrays;
  3. import java.util.Random;
  4. public class BubbleSort {
  5. public static void main(String[] args) {
  6. int[] arr = new int[80000];
  7. Random random = new Random();
  8. for (int i = 0; i < 80000; i++) {
  9. arr[i] = random.nextInt(800000000);
  10. }
  11. long l1 = System.currentTimeMillis();
  12. bubbleSort(arr);
  13. long l2 = System.currentTimeMillis();
  14. System.out.println("对"+arr.length+"个数据排序所花费的时间为:"+(l2-l1)/1000+"s");
  15. }
  16. public static void bubbleSort(int[] arr){
  17. int temp = 0;//定义一个临时变量
  18. boolean flag = false;//标识变量,表示是否进行过交换
  19. for (int i = 0; i < arr.length-1; i++) {
  20. //判断前面的数是否比后面的数大
  21. for (int j = 0; j < arr.length - 1 -i; j++) {
  22. if (arr[j]>arr[j+1]){
  23. flag = true;
  24. temp = arr[j];
  25. arr[j] = arr[j+1];
  26. arr[j+1] = temp;
  27. }
  28. }
  29. //System.out.println("第"+(i+1)+"躺排序结果:"+ Arrays.toString(arr));
  30. if(!flag){//在一趟排序中一次交换都没发生
  31. break;
  32. }else {
  33. flag = false;//重置flag,进行下次判断
  34. }
  35. }
  36. }
  37. }


3.2、运行结果
图片.png
自我感觉良好,我电脑速度还是阔以滴
。。。**