• 中文
    • 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.8k
  • 十二zhangjia.io张甲的邻居

    请登录之后再进行评论

    登录
  • 0
    张甲49站长
    @刘文路 俺不是大牛
  • 0
    打赏了79金币。
  • 0
    大牛,带飞
  • 单栏布局 侧栏位置: