[java] 设计方法实现冒泡排序

问题解析

  • 冒泡排序的概念

冒泡排序:将一组无序数列,通过一次次将未排序的数列中每两个元素进行比较,若与计划的顺序相反,就将两个元素的位置调转过来。

这个过程像泡泡从水中的某个位置一直浮到表面上一样,故称之为冒泡排序。

  • 如何实现冒泡排序

冒泡排序是从一组数列的首端或尾端两个相邻的元素进行比较,一直冒泡到另一端时,就把最低位或最高位的数字找出来并放到相应的位置上了。这个冒泡的过程就可以编写一个循环。

从第二次循环开始,已经排序过的这些最大值 / 最小值元素就不需要继续排序,这个范围会逐渐扩大,我们把这个范围也写一个循环,套在冒泡的循环以外,这个循环执行的次数,就是冒泡排序的总次数啦。

解题思路

给冒泡排序的方法命名为 bubbleSort ,首次确定我们这次冒泡排序的方向为从后往前,那我们需要在数组中找的就是未排序部分的最小值,通过冒泡把它排到最前面去。

设定 [0 , bound] 为已排序区间的范围,[bound , length] 为待排序区间。外层 for 循环把bound设定初始值为 0 , 当bound小于输入数组 arr 的长度时, bound向右移动一位。

内层循环负责冒泡:i 初始位置在最右端,当 i > bound 时,i 向左移动一位。循环里内部是喜闻乐见的调换位置操作。这样, 冒泡排序的方法就写完啦。

输入数组: 2 1 6 9 3 7
第一次排序:bound = 0;
数组变化:
2 1 6 9 3 7
2 1 6 3 9 7
2 1 3 6 9 7
2 1 3 6 9 7
1 2 3 6 9 7
第二次排序:bound = 1;

public static void main(String[] args) {
    int[] arr = {2, 1, 6, 9, 3, 7};
    bubbleSort (arr);
    for (int x : arr) {
        System.out.println(x);
    }
}

public static void bubbleSort(int[] a) {
    //从后往前排最小
    //[0, bound) 已排序区间
    //[bound, length) 待排序区间
    for (int bound = 0; bound < a.length; bound++) {
        for (int i = a.length - 1; i > bound; i--) {
            if (a[i] < a[i - 1]) {
                int tmp = a[i - 1];
                a[i - 1] = a[i];
                a[i] = tmp;
            }
        }
    }
}

容易出现的运行异常就是数组越界,只要记住,arr[n] 里的 n 只能在 [0 , arr.length) 之间即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值