【JAVA】冒泡排序及优化

定义一个静态数组,手动添加数字,利用冒泡排序并遍历排好序后的数组

public class Instance {
	public static void main(String[] args){
		//定义一个静态数组
		int[] arr = {3,43,1,56,5,8,9,21};
		
		//使用冒泡排序
		for(int i=0; i<arr.length-1; i++){
			for(int j=0; j<arr.length-i-1; j++){
				if(arr[j]>arr[j+1]){
					int temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
		}
		
		//遍历排好序的数组
		for(int i=0; i<arr.length; i++){
			System.out.print("\t"+ arr[i]);
		}
		
	}
}

冒泡排序的优化(通过定义flag判断循环完之前是否已经完成排序)

/*	
	// 冒泡排序
	for(int i=0; i<arr.length-1; i++){
		for(int j=0; j<arr.length-i-1; j++){
			if(arr[j]>arr[j+1]){
				int temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			}
		}
	}
	
*/

// 封装冒泡排序方法
static void bubbleSort(int[] arr){

	//对冒泡排序内容进行优化
	for(int i=0; i<arr.length-1; i++){
		boolean flag = true;
		for(int j=0; j<arr.length-i-1; j++){
			if(arr[j]>arr[j+1]){
				int temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
				flag = false;
			}
		}
		if(flag){
			break;
		}
	}
	
}

冒泡排序代码原理

1、我们通过循环对比数组两个元素的大小进行排序,每一次循环都会选出最大值,依次往后排列。
2、第一个for循环代表“对比次数”,因为两两对比,所以需要对比 arr.legnth-1 次。
3、第二个for循环代表“最大值位置”,所以每增加一次对比次数,最大值位置就会少一位:
(原)数组为:[3,43,1,56,5,8,9,21],对比顺序为:[3,43]、[43,1]、[43,56]、[56,5]、[56,8]、[56,9]、[56,21],结果如下:
(1)第一次循环最大值 56 将放在倒数第一位,即结果为:[3,1,43,5,8,9,21,56] // 43 大于 1 时交换了位置
(2)第二次循环最大值 43 将放在倒数第二位,即结果为:[1,3,5,8,9,21,43,56] // 3 大于 1 时交换了位置
(3)第三次循环最大值 21 将放在倒数第三位,即结果为:[1,3,5,8,9,21,43,56] // 没有任何一次循环交换位置
(4)第四次~第七次(最后一次)结果都为:[1,3,5,8,9,21,43,56]
4、优化:通过flag判断是否有元素交换位置,若没有即已经完成了排序,所以在第(3)次打断“对比次数”循环。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值