冒牌排序及优化

通俗的讲,冒泡排序我的理解是,举个例子吧。..

将未排序的数放在一个数组中,例如数组中的值是3,-1,10,4,9。要进行多趟排序,最终才能达到一个有序的数组。就是将数组的一个值与后面的一个值进行比较,如果前面的一个值比较大,则将较大的值一前面的一个值交换位置。如果前面的数小于或者等于后面的数,就不交换。一次往下进行,直到比较完数组中最后的一个值。一趟比较之后,会得到数组中最大的一个值。下一趟比较就不用把之前已经确定的数(也就是一次排序中得到的最大数)加入下一趟比较中。经过上面的重复比较,就会得到一个有序数组。

第一趟排序:

-1,3,10,4,9

-1,3,10,4,9

-1,3,4,10,9

-1,3,4,9,10

第二趟排序在前面得到的数组的基础上,除去最大的数10,不用排序,再将其余的数进行再次排序。

第二趟排序

-1,3,4,9,10

-1,3,4,9,10

-1,3,4,9,10

可以看到第二趟排序没有发生任何的位置交换,所以我们做出一些简单的优化,即检测下一趟排序没有任何交换位置的变化,直接跳出循环,大大减少了程序运行的时间

代码实现

package cn.mrlij.sort;

import java.util.Arrays;

/**
 * 冒泡排序及优化
 * @author dreamer
 *
 */
public class BubbleSort {
	public static void main(String[] args) {
		int[] arr = {3,-1,6,4,9};//待排序数组
		int temp;//临时变量,用于保存排序要交换 的值
		boolean flag = false;
		for(int i = 0;i<arr.length-1;i++) {
			for(int j = 0;j<arr.length-1-i;j++) {
				
				if(arr[j]>arr[j+1]) {
					flag = true;
					temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
			System.out.println("第"+(i+1)+"排序之后是:"+Arrays.toString(arr));
			if(!flag) {
				break;
			}else {
				flag = false;
			}
		}
		
		
		
	}
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值