冒泡排序法及其优化

顾名思义,冒泡就是泡泡一次次往上升。同理,排序中可以将大的泡泡一次次往后面提,提到最后以后,再次将前面的泡泡重复相同步骤找出最大的那个泡泡。

for(int i=0;i<random.length-1;i++) { // i<length-1是因为最后是[j+1]
	    	 for(int j=0;j<random.length-i-1;j++) {  // length-i-1是因为大泡泡已经跑走了,剩下的泡泡不能有大泡泡了
	    		 if(random[j+1]<random[j]) { // 转值
	    			 int temp = random[j]; //中间数
	    			 random[j] = random[j+1];
	    			 random[j+1] = temp;
	    		 }
	    	 }
	     }

优化方案:

因为冒泡排序的时间复杂度为O(n2),上述代码中的整数数组逆序时要一直循环到最后才能真正循环完。但是正常情况下都已经完成排序了但循环依旧在进行。这个时候就能对代码进行优化,在循环中设置一个标签值,bool值什么的都随便,当一次循环当中发现没有泡泡相互转值时就可以认定排序已经完成,这个时候就是上述if代码段一次都没运行。那么可以改成下面这样。

int a=0;
	     for(int i=0;i<random.length-1;i++) {
	    	 for(int j=0;j<random.length-i-1;j++) {
	    		 if(random[j+1]<random[j]) {
	    			 int temp = random[j];
	    			 random[j] = random[j+1];
	    			 random[j+1] = temp;
	    			 a=1;
	    		 }
	    	 }
	    	 if(a==0) {  // if代码段没循环,a=0即退出循环
    			 break;
    		 }
    		 a=0;
	     }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值