【冒泡排序】

冒泡排序的概念和原理

对待要排序的序列,从前向后,通过比较相邻元素的值的大小,如果出现逆序则交换位置,就像是生活现象中加热水的过程中中,气泡会不断的上升,并且会越来越大一样,所以叫做冒泡排序。
水泡会越来越大

冒泡排序处理思想

数据的位置交换

假如我们现在只有两个数据a和b,那么我们先对这相邻的两个数据a,b进行比较。
如果a>b那么我们让a和b交换位置。其代码完成如下:

			if(a>b){
                   int temp=a;
                   a=b;
                   b=temp;
               }

在上述代码中我们需要一个第三者临时值temp来帮助我们完成交换。

大的数据移至数组结尾

大的数据不断向后面移动,其实就是上一步的交换的步骤多次的实现,我们不断比较相邻的两个数值,如果前一个元素的值比后一个元素的值大,那么我们就将两个数值交换位置,如果前一位元素的值比后一个元素的值小,则不进行交换,if语句帮助我们完成判断。

for(int i=0;i<nums.length-1;i++){
               if(nums[i]>nums[i+1]){
                   int temp=nums[i];
                   nums[i]=nums[i+1];
                   nums[i+1]=temp;
               }
        }

这样一来我们就成功将最大的元素移至数组的结尾。

依次向后移动大的数据

在完成上述步骤之后我们只需要将nums.length-1-1就能将第二大的数据移动到数组的length-1-1的位置上(nums.length-1已经是最大的数据了无需再管)

for(int i=0;i<nums.length-1-1;i++){
               if(nums[i]>nums[i+1]){
                   int temp=nums[i];
                   nums[i]=nums[i+1];
                   nums[i+1]=temp;
               }
        }

注意:之所以使用的是小于length-1,其原因在于,我们使用的是前一位与后一位作比较,你不能让数组下标越界,我们是让i与i+1进行的比较。

整体的实现

这个nums.length-1可以看作为nums.length-1-0,这样我们是否可以理解为其实每一次都是nums.length-1-i呢?k每一次都在加一,因为我们每一次都将一个数据移动到了我们想要的位置,那么可操作的数据就减少一位。

 for(int k=0;k<nums.length-1;k++){
           for(int i=0;i<nums.length-1-k;i++){
               if(nums[i]>nums[i+1]){
                   int temp=nums[i];
                   nums[i]=nums[i+1];
                   nums[i+1]=temp;
               }
           }
       }

注意:循环的次数,我们一共有nums.length条数据,如果我们排列到最后一次是是两个数据在进行比较,当这两个数中大的那个数据移动到了后面,那么还有必要在对最后剩下的那个数据进行排序吗?它只剩下一个位置可以去了,所以我们只需要进行nums.length-1次排序即可。

自我感悟

冒泡排序的时间复杂度较高,为O(n*n)。初次学习可能不是很容易理解,应当多多练习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值