java学习笔记之冒泡排序及其他

1、冒泡排序

        顾名思义,冒泡的意思就是,在水里气泡会咕噜咕噜从水下漂至水上。故,冒泡排序就是,每一次确定一个值的位置。这样循环一轮后,每一个数都被交换到了它最终的位置。

        例如数组:31,44,11,66,78,56,34,65,17,65,54,21,45

        我们将它升序排序:第一遍遍历

        31<44,不交换。

        44>11,交换位置。数组变成:31,11,44,66,78,56,34,65,17,21,45  继续遍历。

        44<66,不发生交换。

        66<78,不发生交换。

        78>56,交换位置。数组变成:31,11,44,66,56,78,34,65,17,21,45  继续遍历。

        78>34,交换位置。数组变成:31,11,44,66,56,34,78,65,17,21,45  继续遍历。

        78>65,交换位置。数组变成:31,11,44,66,56,34,65,78,17,21,45  继续遍历。

        78>17,交换位置。数组变成:31,11,44,66,56,34,65,17,78,21,45  继续遍历。

        78>21,交换位置。数组变成:31,11,44,66,56,34,65,17,21,78,45  继续遍历。

        78>65,交换位置。数组变成:31,11,44,66,56,34,65,17,21,45,78  继续遍历。

可以看到,经过一轮的比较,最大值78已经到了它的最终位置。然后进行第二轮,78已经定了,所以第二轮中78 就不用比较了,因此第二轮比较次数减一。这样循环往复,最终我们会得到一个升序的有序序列。代码如下:

min就是我们要排序的数组名。冒泡排序的优化可以 通过增加一个flag变量来标记一轮比较有没有发生交换,如果发生了交换就将flag重新赋值,如果没有交换说明代码数组已然有序,直接break即可!

2、插入排序

插入值排序可以类比我们要在一个有序数组里插入一个值,使它保持降序或者升序。插入排序与之大同小异,区别就是我们要插入的值比较多。

算法描述:在排序的第一步,将数组中第一个数当做一个有序数组(一个数字显然是有序的),然后将这个数组后面的一个值插入到这个数组中。判断它应该插入的位置。插入后,我们就将原来一个数字的数组扩展成了两个数字的有序数组。继续将新数组后面的值插入,即可。

算法过程:数组[97,99,87,65,100,51,43,57]

                第一步:将数组的第一个元素97当做我们的目标数组,99是我们要插入的值。降序排列,99>97,因此97向后移动,99存放在97原来的位置。

                第二步:目标数组99,97。要插入的值是87,87<97,所以位置不变,数组大小扩充1,变为3。

                第三步:目标数组99,97,87.要插入的值是65,65<87,所以位置不变,数组大小扩充1,变为4。

                第四步:目标数组99,97,87,65.要插入的值是100,100>65,所以65向后移动,100>87,87向后移动,同理,97,99向后移动,100找到插入位置,插入。数组扩充1,大小为5.

                第五步:目标数组100,99,97,87,65.要插入的值是51,51<65,所以位置不变。数组大小扩充为6。

                第六步:目标数组100,99,97,87,65,51.要插入的值是43,43<51.所以位置不变,数组大小扩充为7.

                第七步:目标数组100,99,97,87,65,51,43.要插入的值是57,57>43,所以43向后移动,57>51,51向后移动 。57<65找到插入位置,将它插在65的后面。

                至此,循环结束。得到数组100,99,97,87,65,57,51,43   ,排序完成。

代码:  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值