冒泡算法基本版(你不会不懂吧!)

数组排序——冒泡

大概就是

总循环的次数

遍历数组一次,就把数组中最大的数放在最后。(这个的前提是从小到大排序的)
所以我们可以得知循环的次数就是数组的长度-1。
这是为什么:
因为假设这里有3张数字卡片。仔细想想是不是只要把其中两个数排好顺序那么最后一个的位置不就正确的吗!所以循环的次数就是数字的长度-1

内部的换位

循环次数确定了,那么如何换位呢?
在这里插入图片描述
这里我们看数字的部分可以看到
前面的4 5是符合从小到大的,那么6开始就不符合了(因为此位置的元素大于下一个位置的元素),所以需要把6与后置位交换位置。
此时是 4 5 3 6 2 1
那么看到其中最大的数还是没有到末尾所以还需要经过两次交换。直到
4 5 3 2 1 6此时才是第一次的循环结束。
那么第二次呢此时看到第二大的数就是5,此时5的位置是1,所以当位置1的与后置位比较时那么就需要互换位置。
后面就是重复此过程就是了。
这里给讲解一下互换代码
int t=arr [ i ];
a [ i ]=arr [ i+1 ];
a [ i+1 ]=t;
==这是一般的交换代码 ==
还有高级的一种交换
arr[ i ]=arr[ i ]+arr[ i+1 ];
arr[ i+1 ]=arr[ i ]-arr[ i+1 ];
arr[ i ]=arr[ i ]-arr[ i+1 ];
(这种当时给我的冲击太大了!那些大大佬真猛)
好了回归正题!

进入代码阶段。

首先定义数组
int[] a={1,5,8,7,6,5};
再写循环:
for(int i=0;i<a.length-1;i++){
}
1.(这就是循环的外体) 2.相当于下面的左边一列 3.(也可以说是二维数组打印时的第一层for)
这三种方式都是一样的看你如何理解。
在这里插入图片描述
写完外层循环那么写内层
for(int i=0;i<a.length-1;i++){
for(int j=0;j<a.length-1-i;j++){
if(a [ j ] > a[ j+1] ){
int t=arr [ j ];
a [ j ]=arr [ j+1 ];
a [ j+1 ]=t;
}
}
}
==解释:==这里
1.j=0 是从第一个位置开始的比较
2.j<a.length-1-i 分两步说明
(1.a.length-1是因为x个数只需要比较x-1次就行啦。当然也凑巧的避免了i+1 的越界异常。(不识凑巧,是绝对哈哈哈)
(2.a.length-1-i这个-i表示的是因为冒泡次数多,对比次数就可以下降,冒泡次数多也代表数组最后的数越来越大。减少不必要的对比。

总结

这只是最基础的冒泡法,后续还会有更高级别的版本。敬请期待!!!
谢谢大家!我是帅气代言人!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值