• 中文
    • English
  • 注册
  • 查看作者
    • 冒泡排序详解:Java版

      一.  前言

      今天在学习数组的时候,又讲起了冒泡排序,这里将自己的理解和思路整理以下,方便以后学习算法的时候整理。

      最新更新时间:2019年3月4日

      二.  代码实现

      冒泡排序的实现方法有非常多种,这里给出最方便理解的代码:

      //从小到大排列
      public class Bubble {
          public static void main(String[] args) {
              int[] nums = new int[]{5, 7, 3, 0, 1};
              for (int i = 0; i < nums.length - 1; i++) {
                  for (int j = 0; j < nums.length - i - 1; j++) {
                      if (nums[j] > nums[j + 1]) {
                          int temp = nums[j];
                          nums[j] = nums[j + 1];
                          nums[j + 1] = temp;
                      }
                  }
              }
      
              for (int i : nums) {
                  System.out.print(i + " ");
              }
          }
      }
      
      //从大到小排列
      public class Bubble {
          public static void main(String[] args) {
              int[] nums = new int[]{5, 7, 3, 0, 1};
              for (int i = 0; i < nums.length - 1; i++) {
                  for (int j = 0; j < nums.length - i - 1; j++) {
                      if (nums[j] < nums[j + 1]) {
                          int temp = nums[j];
                          nums[j] = nums[j + 1];
                          nums[j + 1] = temp;
                      }
                  }
              }
              for (int i : nums) {
                  System.out.print(i + " ");
              }
          }
      }

      三.  冒泡讲解

      1.  作用

      言简意赅,冒泡排序的作用就是将一组乱序的数据,按照顺序排列,比如从小到大排列,或者从大到小排列。

      2.  原理

      冒泡排序的原理非常简单,从第一个数据开始,依次比较相邻的两个数据,将更大的那个数据向后移动,比如有下面这组数据,我们从小到大将其排列:

      int [] nums = new int[] {5,7,3,0,1};

      我们首先比较nums[0] 和 nums[1],如果nums[0] > nums[1],那么交换彼此的值,如果nums[0] < nums[1],则不交换

      再比较nums[1] 和 nums[2],如果nums[1] > nums[2],那么交换彼此的值,如果nums[1] < nums[2],则不交换

      再比较nums[2] 和 nums[3,如果nums[2] > nums[3],那么交换彼此的值,如果nums[2] < nums[3],则不交换

      再比较nums[3] 和 nums[4],如果nums[3] > nums[4],那么交换彼此的值,如果nums[3] < nums[4],则不交换

      经过上面的第一轮比较后,数组中最大的那个数就被换到了最后,也就是nums[4]的位置,然后继续第二轮比较,第二轮比较结束后,第二大的数被换到了nums[3]的位置,依次类推,排序完成。下面给出具体的图像化步骤

      四.  图解冒泡

      还是上面的那组数据,首先开始第一次外循环,操作如下:

      冒泡排序详解:Java版

      第一次外循环结束后,最大的数字7被移到了最后,接下来开始第二次外循环,操作如下:

      冒泡排序详解:Java版

      第二次外循环结束后,除了7之外,最大的数字5被移到了最后,但是这里有个问题,就是第一次外循环中,内循环执行了四次,为什么第二次外循环的内循环只执行了三次呢?我们首先来看一下内循环的代码:

      for(int j = 0; j < nums.length - i - 1; j++)

      通过代码我们可以看出,每次外循环,最大的数都已经放在了最后,其他的数不需要再次和7比较了,所以每次内循环次数会逐渐减少。接下来开始第三次外循环,操作如下:

      冒泡排序详解:Java版

      最后进行第四次外循环,排列结束:

      冒泡排序详解:Java版

      山东省
    • 0
    • 3
    • 0
    • 1.6k
    • 十二zhangjia.io张甲的邻居

      请登录之后再进行评论

      登录
    • 0
      张甲49站长
      @刘文路 俺不是大牛
    • 0
      打赏了79金币。
    • 0
      大牛,带飞
    • 赞助本站

      • 支付宝
      • 微信
      • QQ

      感谢一直支持本站的所有人!

      单栏布局 侧栏位置: