数组八大排序之冒泡排序(零基础都能懂的详解-附图)

冒泡排序

  • 在八大排序中,冒泡排序是最为出名的排序算法之一!

  • 冒泡排序的代码还是相当简单的,两层循环,外层是冒泡轮数,里层是依次进行的比较交换;

  • 时间复杂度为O(n^2);

  • 冒泡排序的基本思想:

    1. 比较数组中相邻的两个元素,如果第一个数比第二个数大(从小到大排序就把大数值放到后面,从大到小相反),就交换它们的位置;
    2. 每一次比较都会产生一个最大或最小的数组值;
    3. 下一次循环就排除 2 步骤得到的最大或最小值,只排序剩下的元素,再得到一个新的最大或最小值;
    4. 依次循环 1、2、3 步骤,直到所有元素排序完成;
  • 图解:
    冒泡排序

  • 通过实例理解(这里用的Java代码):

//自定义的排序方法(冒泡排序的代码位置),从小到大排序
public static void sort(int[] arr) {
	//外层循环,根据待排序数组长度判断要循环的次数;
	for(int i=0;i<arr.length;i++){
		//内层循环,把每个相邻的元素比较一遍,如果前面数大就会和后面相邻的交换,这样一直到数组最后一个元素,就会得到一个最大值;
		/*为什么 j<arr.length-1-i :
			1. 首先是j<arr.length-1:因为比较的时候 j 和 j+1 比较,如果 j 等于数组长度也就是最后一个元素,那么 j+1 就超出了数组的长度,无法取到 j+1 的值,这会引起程序报错,所以内层循环的 j 要小于(数组长度-1),写 j<arr.length-1 也可以,因为后面排序好的再比较也不会交换;
			2. 然后是j<arr.length-1-i:因为外层每次循环都会得到一个最大或最小值,所以每次循环都会有一个最大或最小数不用参加下一次循环,(arr.length-1)-i 之后数组长度就会减去外层循环次数,相当于把排序好的数剔除;
		*/
		for(int j=0;j<arr.length-1-i;j++) {
			if(arr[j]>arr[j+1]) {
				int a = arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=a;
			}
		}
	}
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值