// 冒泡排序:经典算法题。
// 有一组数字 2,10,8,20,11,把这组数按照从大到小的顺序排列出来。20,11,10,8,2
// 2,10,8,20,11
// 找出最大的数,放到第一位(1,2,3,4,5)
// 20,10,8,2,11
// 从剩下的4个数中,找最大的(2,3,4,5)
// 20,11,8,2,10
// 从剩下的3个数中,找最大的(3,4,5)
// 20,11,10,2,8
// 从剩下的2个数中,找最大的(4,5)
// 20,11,10,8,2
※注意下:下面3种方法中的结果,是降序的,也就是从大到小顺序排列,真正的冒泡排序好像是从小到大的?
上面是题中给的步骤,我没仔细看 先自己想了想 (随便看看 有空再尽可能改改)
int[] a = {2,10,8,20,11}; boolean panDuan = true; int num = 0; System.out.println("输出原数组:"); //输出原数组 for (int i : a) { System.out.print(i+" "); } System.out.println(); while(panDuan) //最外层循环 设置成死循环,只有当内层循环判定条件满足后才跳出循环 { for(int i = 0 ; i<4 ;i++) //i为 数组下标,因为4是最后一位,如果前面运行正常,是不需要再比较的.所以范围设置为i<4就可以了 { for(int j = 4 ; j>=0 ;j--) // j同为数组下标,数组下标为i的元素,与数组中的元素,以倒序的顺序依次比较. { if(i == j) //当i = j 时,如果前面运行正确,是不需要再比较的 ,并且不继续运行下去,所以跳出变量为j的循环,继续执行变量为i的循环 { break ; }else if(a[i]<a[j]) //当满足条件,交换两个元素的位置 { a[i] = a[i]+a[j]; a[j] = a[i] - a[j]; a[i] = a[i] - a[j]; } } } for(int k = 0 ; k <4 ; k++) //检测循环 用来判断 现在的数组是否达到条件 { for(int l = 4 ;l >= 0 ; l--) { if(k == l) { break ; }else if(a[k]>a[l]) //判断大小 { num++; //如果条件正确,num+1 } } } if(num == 10) //如果条件都正确,那么num应该加10次,所以 当num=10,将布尔值的panDuan值改成false,就可以跳出while循环. { panDuan = false; } num = 0; //如果一次循环达到想要的数组,将num归0,继续循环直到正确. } //while 结束括号 System.out.println("输出排序后数组:"); for (int m : a) { System.out.print(m+" "); } } }
第二种方法:
这个应该是不使用 java.util.Arrays.sort(a);的话,最好的方法吧,更容易理解,更简单,适用性更强不用考虑数组长度.
for(int i= 0 ;i<a.length ; i++) { for(int j = i+1 ; j<a.length ; j++) { if(a[i]<a[j]) { a[i] = a[i] + a[j]; a[j] = a[i] - a[j]; a[i] = a[i] - a[j]; } } }
第三种方法:
将排序后的数组中的元素,依次找出来,数组长度大的话会非常麻烦.
int max = a[0]; for(int i= 1 ; i<a.length ; i++) //确定了排序成功后数组中第一个数 { // 从第2位开始比较,找出最大的数 if(max<a[i]) { //当前位和最大数所在的位,交换 a[0] = a[i]; a[i] = max; max = a[0]; } } System.out.println("***交换后***"); for (int m : a) { System.out.print(m+" "); } int max1 = a[1]; for(int j= 2 ; j<a.length ; j++) //确定了排序成功后数组中第二个数 { if(max1<a[j]) { a[1] = a[j]; a[j] = max1; max1 = a[1]; } } System.out.println("***交换后***"); for (int m : a) { System.out.print(m+" "); } int max2 = a[2]; for(int k= 3 ; k<a.length ; k++) //确定了排序成功后数组中第三个数 { if(max2<a[k]) { a[2] = a[k]; a[k] = max2; max2 = a[2]; } } System.out.println("***交换后***"); for (int m : a) { System.out.print(m+" "); } int max3 = a[3]; for(int l= 4 ; l<a.length ; l++) //确定了排序成功后数组中第四个数 { if(max3<a[l]) { a[3] = a[l]; a[l] = max3; max3 = a[3]; } } System.out.println("***交换后***"); for (int m : a) { System.out.print(m+" "); }
第四种:
使用Arrays.sort()方法
升序排列数组
//import java.util.Arrays; 注意要先导入 int[] a = {2,10,8,20,11}; Arrays.sort(a); for (int i : a) { System.out.print(i+" "); }
注意结果是升序的,跟上面的最后结果不同.
(初学java,博客记录为主,轻喷,错误想必不少,如果您能指出,不胜感激,部分内容非原创,来源于百度)