入门算法之冒泡排序

一、冒泡排序的原理:
相邻的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换

例子:

int[] t = {9,0,1,2,8,5,6};

//内循环
从9开始第一次内循环:
第一次:9>0,9与0交换位置,数组t变成

int[] t = {0,9,1,2,8,5,6};

第二次:9>1,9 与1交换位置,数组t变成

int[] t = {0,1,9,2,8,5,6};

第三次:9>2,9与2交换位置,数组t变成

int[] t = {0,1,2,9,8,5,6};

第四次:9>8,9与8交换位置,数组t变成

int[] t = {0,1,2,8,9,5,6};

第五次:9>5,9与5交换位置,数组t变成

int[] t = {0,1,2,8,5,9,6};

第六次:9>6,9与6交换位置,数组t变成

int[] t = {0,1,2,8,5,6,9};

自此,第一次内循环就结束了,我们可以发现,数组t的长度为7,而内循环的次数为7-1=6


外循环

第二次,从0开始从左至右与相邻的数字比较,开始第二次内循环比较

第一次:0<1,0和1不发生交换,数组t变成

int[] t = {0,1,2,8,5,6,9};

第二次:1<2,1和2不发生交换,数组t变成

int[] t = {0,1,2,8,5,6,9};

第三次:2<8,2和8不发生交换,数组t变成

int[] t = {0,1,2,8,5,6,9};

第四次:8>5,8和5发生交换,数组t变成

int[] t = {0,1,2,5,8,6,9};

第五次,8>6,8和6发生交换,数组t变成

int[] t = {0,1,2,5,6,8,9};

第六次,8 <9,8和9不发生交换,数组t变成

int[] t = {0,1,2,5,6,8,9};

至此,第二次内循环结束,由于我写的数组例子不好,到此次循环,数组t已经从小打到排序结束,实际上,还是要进行第三次外循环,依旧从数组t的首位开始,依次相邻的两个相比,外循环的次数就等于数组的长度

——————————————————————————————- 总结:1、冒泡排序由两次组成,外循环次数为数组长度,内循环次数为数组长度-1

//以下由代码实现以上逻辑
public class Demo {

    public static void main(String[] args) {
        int[] t = { 9, 0, 1, 2, 8, 5, 6 };
        // 外循环
        for (int i = 0; i < t.length; i++) {
            for (int j = 0; j < t.length - 1; j++) {
                // 如果t[j]>t[j+1],则两两交换
                // 定义一个临时变量temp储存t[j]
                if (t[j] > t[j + 1]) {
                    int temp = t[j];
                    t[j] = t[j + 1];
                    t[j + 1] = temp;
                }
            }
        }
        // 输出排序后的数组t的结果
        for (int a = 0; a < t.length; a++) {
            System.out.println(t[a]);
        }

    }

}

输出结果:
0
1
2
5
6
8
9

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值