冒泡排序

 

1.算法的介绍

冒泡排序是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,将大的元素往后挪。循环重复地进行直到没有再需要交换,也就是说该数列已经排序完成。通俗的将元素比喻成汽包, 越大的汽包越往上“浮”到数列的末端。

2.算法的原理

对于数组arr:

  • 0~N-1位置范围上,两两交换,找出最大的数放到N-1位置, 搞定N-1位置上的数;

  • 0~N-2位置范围上,两两交换,找出最大的数放到N-2位置, 搞定N-2位置上的数;

  • 重复以上步骤;在没有排序的位置依次搞定最后一个位置上的数;

  • 直到:0~1位置范围上,两两交换,找出最大的数放到1位置, 搞定1位置上的数。

3.动态图演示

 

4.实现

    public static void bubbleSort(int[] arr) {
       // 1.参数判断
       if (arr == null || arr.length < 2) return;

       for (int i = arr.length - 1; i > 0; i--) { // 临界把握: i = 0 时,arr已经排行序,所以i > 0
           // 0 ~ n-1 上两两交换找出最大值 放到n-1位置
           // 0 ~ n-2 上两两交换找出最大值 放到n-2位置
           for (int j = 0; j < i; j++) {
               if (arr[j] > arr[j + 1]) {
                   swap(arr, j, j+1);
              }
          }
      }
  }

   // ^ 异或 交换 arr上i和j上的值;
   public static void swap(int[] arr, int i, int j) {
       arr[i] = arr[i] ^ arr[j];
       arr[j] = arr[j] ^ arr[i];
       arr[i] = arr[i] ^ arr[j];  
  }

 

5.算法评估

  • 时间复杂度:O(N^2)

  • 空间复杂度:O(1)

 

代码地址:https://github.com/cosmos-lin/Algorithm2021/blob/master/src/sort_algorithm/BubbleSort.java

 

posted @ 2021-12-01 19:27  cosmos-lin  阅读(132)  评论(0)    收藏  举报