冒泡排序,小到大-大到小,xiaoyu a.length 详情见下边
// 冒泡排序 从小到大 就是<a.length-1,下边是<a.length-j-1;可是从大到小就是a.length,<a.length-1;(亲测的确是)从大到小如果按从小到大,会排不完就输出了。
这个怎么才能知道到底该 < 什么呢? 拜托 详细 说明谢谢啦!!!!
for(int i=0;i<a.length-1;i++) {//走了多少趟
for(int j=0;j<a.length-j-1;j++) {//内循环控制每趟排序,找出每一趟最大值
//从大到小
for(int i=0;i<a.length;i++) {
for(int j=0;j<a.length-1;j++)
正在回答
同学你好,同学的思路有些不正确,对于冒泡排序,从大到小的排序,也同样是通过外循环控制排序的趟数,内循环是控制每趟排序中,两两进行比较的次数,而想要从大到小进行排序,只需要判断如果当前一个元素<后一个元素时,我们进行交换就可以了。
所以并不是判断条件为a.length,内循环为a.length-1;为从大到小排序哦~
如果使用判断条件为a.length,内循环为a.length-1;也是可以排序,但是这种方式是指外循环为一共需要排序数组长度a.length趟,而内循环a.length-1,则代表每一趟排序中都需要重新从第一个元素开始,进行两两元素比较,而其实在第一趟排序中,已经将最大的数排出来,无需再第二趟排序中,再次重新进行比较排出最大的数。所以这种方式会大大的降低执行效率,是不建议的。
从大到小排序的具体修改如下:
代码如下:
public class SortDemo { public static void main(String[] args) { //冒泡排序 int[] a={34,53,12,32,56,17}; System.out.println("排序前的数组元素为:"); for(int n:a){ System.out.print(n+" "); } System.out.println(); int temp; for(int i=0;i<a.length-1;i++){ //内重循环控制每趟排序 for(int j=0;j<a.length-1-i;j++){ if(a[j]<a[j+1]){ temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } System.out.println("从大到小排序"); for(int n:a){ System.out.print(n+" "); } } }
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星