详解冒泡排序实现数组的排序(附源码)

所谓冒泡排序,就是不断地比较数组中相邻的两个元素,较小者向上浮,较大者往下沉,整个过程和水中气泡上升的原理相似。

第一步:从第一个元素开始,将相邻的两个元素依次进行比较,直到最后两个元素完成比较。如果前一个元素比后一个元素大,则交换他们的位置。整个过程完成后数组中最后一个元素自然是最大值,这样就完成了第一轮比较。

第二步:除了最后一个元素,将剩余元素两两进行比较,过程与第一步相似,这样就可以将数组中第二大的数放在倒数第二个位置。

第三步:以此类推,持续对越来越少的元素进行上面的步骤,直到没有任何一个元素需要比较为止。

代码示例:

public class pao {
	public static void main(String args[]) {
		int[] arr= {9,8,3,5,2};
		System.out.print("原数组为:");
		//冒泡排序前先循环打印原数组元素
		for(int i=0;i<arr.length;i++) {
			System.out.print(arr[i]+" ");
		}
		System.out.println();
		
		//进行冒泡排序
		//外层循环定义需要比较的轮数(两数比较,需要比较n-1轮)
		for(int i=1;i<arr.length;i++) {
			System.out.print("第"+i+"轮:");
			//内层循环定义第i轮需要比较的两元素
			for(int j=0;j<arr.length-1;j++) {
				//如果前一个元素大于后一个元素则进行交换
				if(arr[j]>arr[j+1]) {
					int temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
			for(int k=0;k<arr.length;k++) {
				System.out.print(arr[k]+" ");;
			}
			System.out.println();
		}
		
		//完成冒泡排序后循环打印数组元素
		System.out.print("冒泡排序后数组为:");
		for(int i=0;i<arr.length;i++) {
			System.out.print(arr[i]+" ");
		}
	}
}

运行结果:
  

 

比较过程:(数组第一个元素下标为0)

第一轮(i=1)符合j<arr.length这个条件进入内层循环

j=0

第0个元素是9,第j+1个元素是8(9>8两元素交换位置)交换后数组为{8,9,3,5,2}

比较结束j++即j=1,符合j<arr.length-1这个条件继续比较

第1个元素是9,第j+1个元素是3(9>3两元素交换位置)交换后数组为{8,3,9,5,2}

比较结束j++即j=2,符合j<arr.length-1这个条件继续比较

第2个元素是9,第j+1个元素是5(9>5两元素交换位置)交换后数组为{8,3,5,9,2}

比较结束j++即j=3,符合j<arr.length-1这个条件继续比较

第3个元素是9,第j+1个元素是2(9>2两元素交换位置)交换后数组为{8,3,5,2,9}

比较结束j++即j=4,不符合j<arr.length-1这个条件,内层循环结束回到外层循环

结束第一轮比较后数组变为{8,3,5,2,9}

结束第一轮i++,进行第二轮比较(i=2)符合j<arr.length这个条件进入内层循环

j=0

第0个元素是8,第j+1个元素是3(8>3两元素交换位置)交换后数组为{3,8,5,2,9}

比较结束j++即j=1,符合j<arr.length-1这个条件继续比较

第1个元素是8,第j+1个元素是5(8>5两元素交换位置)交换后数组为{3,5,8,2,9}

比较结束j++即j=2,符合j<arr.length-1这个条件继续比较

第2个元素是8,第j+1个元素是2(8>2两元素交换位置)交换后数组为{3,5,2,8,9}

比较结束j++即j=3,符合j<arr.length-1这个条件继续比较

第3个元素是8,第j+1个元素是9(8<9两元素不用交换位置)数组任为{3,5,2,8,9}

比较结束j++即j=4,不符合j<arr.length-1这个条件,内层循环结束回到外层循环

结束第二轮比较后数组变为{3,5,2,8,9}

结束第二轮i++,进行第三轮比较(i=3)符合j<arr.length这个条件进入内层循环

j=0

第0个元素是3,第j+1个元素是5(3<5两元素不用交换位置)数组任为{3,5,2,8,9}

比较结束j++即j=1,符合j<arr.length-1这个条件继续比较

第1个元素是5,第j+1个元素是2(5>2两元素交换位置)交换后数组为{3,2,5,8,9}

比较结束j++即j=2,符合j<arr.length-1这个条件继续比较

第2个元素是5,第j+1个元素是8(5<8两元素不用交换位置)数组任为{3,2,5,8,9}

比较结束j++即j=3,符合j<arr.length-1这个条件继续比较

第3个元素是8,第j+1个元素是9(8<9两元素不用交换位置)数组任为{3,2,5,8,9}

比较结束j++即j=4,不符合j<arr.length-1这个条件,内层循环结束回到外层循环

结束第二轮比较后数组变为{3,2,5,8,9}

结束第三轮i++,进行第四轮比较(i=4)符合j<arr.length这个条件进入内层循环

j=0

第0个元素是3,第j+1个元素是2(3>2两元素交换位置)交换后数组为{2,3,5,8,9}

比较结束j++即j=1,符合j<arr.length-1这个条件继续比较

第1个元素是3,第j+1个元素是5(3<5两元素不用交换位置)数组任为{2,3,5,8,9}

比较结束j++即j=2,符合j<arr.length-1这个条件继续比较

第2个元素是5,第j+1个元素是8(5<8两元素不用交换位置)数组任为{2,3,5,8,9}

比较结束j++即j=3,符合j<arr.length-1这个条件继续比较

第3个元素是8,第j+1个元素是9(8<9两元素不用交换位置)数组任为{2,3,5,8,9}

比较结束j++即j=4,不符合j<arr.length-1这个条件,内层循环结束回到外层循环

结束第二轮比较后数组变为{2,3,5,8,9}

结束第四轮i++,此时i=5不符合i<arr.length这个条件技术外层循环

整个循环结束

  • 24
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值