冒泡排序 选择排序简单讲解

冒泡排序(从小到大)

比较相邻的元素。如果第一个比第二个大,就交换他们两个。

对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

参考上图,最上面的就是数组里面的数字,是乱序的,长度为4;

第一轮就用15和后面的数字相比,15在数组的下标是0,就和6比(下标1),如果15比6大,那么他们两个就交换位置,然后15现在的下标就是1,然后再和4比(下标2),如果15比4大,他们就交换位置,现在15的下标就是2,再和8比(下标3),如果15比8大,那么他们就交换位置,然后现在15的下标就是3,然后第一轮比完,15就到最右边去了,15就不用比了,因为15已经是最大了。于是第一轮就只比了3次。

第二轮就用第一轮的结果,用6和4比,如果6比4大,那么就交换位置,然后6现在的下标是1,再和8比,如果6比8大就交换位置,现在显然不是,就不用交换位置,因为15已经是最大了就不用再比了,现在数字8也比出来了,是比15小的数字。于是第二轮就比了2次。

第三轮就是用第二伦的结果,用4和6比,如果大的话就交换位置,现在显然4并不比6大,就不用交换位置,于是6就是比8小的数字,4就是最小的数字。不知不觉就把这4个数的顺序由小到大排列出来了。

于是我们得到了3个结论:

1.循环的轮数:长度-1

2.每一轮比较的次数递减

3.首轮的次数为:长度-1

好了,接下来我们就直接上代码

    int[] arr={54,34,48,17};    //定义数组
		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]){            //判断下标n是不是比n+1大
					arr[j]=arr[j]^arr[j+1];     //这里三行就是让n和n+1换位的
					arr[j+1]=arr[j]^arr[j+1];        
					arr[j]=arr[j]^arr[j+1];
				}
			}
		}
		System.out.println(Arrays.toString(arr));    //排序完成,打印输出

选择排序

我这个版本的选择排序是把数组的第一个元素下标设一个变量,是用来存放最小的数字下标的,用这个数字和下一个数字进行比较,如果这个数字大于他后面的那个数字,那么就说明后面的数字比他小,就把这个比他小的下标赋值给存放最小数字下标的变量里面。挨个比较就会找出最小数字的下标,然后就和第一个元素互换。

参考上图,第一轮就拿数组第一个元素3开始,用3和他后面的那个数比较,如果3大于9,那么就把9的下标赋值给变量,如果不是就不变,前3次比较发现3都是较小的哪一个,到第4次的时候3就会比1大,然后就会把1的下标赋值给变量。最后用 arr[0]=arr[index]和第一个元素调换位置就行了(这里假设index是最小的数的下标arr[0]就是数组的第一个元素),于是现在第一个最小的数就出来了。

第二轮就拿数组第2个元素也就是arr[1]依次和后面的数进行对比,如果arr[1]>arr[2]那么就把arr2的下标赋值给变量,最后再arr[1]=arr[index] 把最小数个数组第二个元素调换位置即可

后面也是这样,第三论拿第三个元素和后面作比较。

这里我们也可以得出结论:

1.最大轮数:长度-1

2.每轮比较次数递减

3.首轮比较次数为长度-1

4.每轮的选择数都在递增

 下面我们直接上代码:

        int[] arr={54,34,48,17,14};
		for(int i=0;i<arr.length-1;i++){          //控制几轮
			int index=i;    //假设最小数字下标,随轮数变化
			for(int j=i+1;j<arr.length;j++){    //设置和后面的数作比较所以y=i+1
				if(arr[index]>arr[j]){          //如果下标大于后面的数,说明后面的数较小,就把
					index=j;                    //小的数的下标赋值给index;
				}
			}
			if(index!=i){                        //这一轮比价完后我们就会得到最小的数的下标
				arr[i]=arr[index]^arr[i];        //于是就和第1个元素呼唤位置。到了第二轮i就会
				arr[index]=arr[index]^arr[i];    //变成2,到时候最小数就会和数组第二个元素互换
				arr[i]=arr[index]^arr[i];
			}
		}
		System.out.println(Arrays.toString(arr));  //排序完成,打印输出

好了,我的冒泡排序和选择排序就讲解完了,上面写的都仅是自己的理解,如果描述不当或用的方法不对请多多理解。谢谢观看,希望我写的能让你们回想起来一点,如果写的不好也请多多理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值