- 任务描述
- 相关知识
- 编程要求
- 测试说明
任务描述
本关任务:实现数组从大到小的排序(降序排序)。
相关知识
为了解决数组排序的问题你需要先了解:选择排序。
选择排序
关于选择排序,你可以理解为一个循环打擂台的过程,还记得我们在上一章节中求数组中的最大值吗?
-
我们运用打擂台的原理,可以求出数组中的最大值。 核心代码:
-
int max = scores[0]; for (int i = 1; i < scores.length; i++) { if(max < scores[i]){ //求最大值 max = scores[i]; } }
这样一轮循环之后我们就可以求出数组
scores
的最大值。 第一轮擂台赛求出最大值之后,我们可以对接下来的数据再进行打擂台的操作,就出剩下数据的最大值(也就是第二大的值),以此类推,就可以实现数组从大到小的排序。实现过程
为了实现选择排序,我们需要求出最大值,并且和相比较的数据交换位置:接下来我们对数组
int[] arr = {6,5,8,0,2,9}
来进行第一趟循环,将最大值移动到数组的第一位。 -
代码实现:
-
int[] arr = {6,5,8,0,2,9}; for (int i = 0; i < arr.length-1; i++) { if(arr[0] < arr[i+1]){ int temp = arr[0]; arr[0] = arr[i+1]; arr[i+1] = temp; } }
一次循环操作就可以找出数组中的最大值,并将其移动到数组的首位,所以对于一个长度为
6
的数组,我们只需要进行5
(length-1)次上述操作即可将数组降序排序了。接下来我们进行第二趟循环,求第二大的值,并将其移动到数组的第二个位置。因为我们已经求出了最大值,所以这一次循环,最大值不用参与比较。
-
代码实现:
-
结果:
[9, 8, 5, 0, 2, 6]
可以发现经过两轮循环我们找出了数组中最大的两个值,并且移动他们到了数组的前两位。
现在按照上述步骤就可以实现数组的排序了,不过如果我们照搬上述代码,就会有很多冗余的代码,所以需要你来改进,怎么改进是需要你思考的。
告诉你一个秘密:使用
Arrays.toString(数组)
可以直接输出数组中的值哦! 如下: -
输出结果:
[6, 5, 8, 0, 2, 9]
思考题
本关所讲述的选择排序是一个简化版本,如果你想要学习优化版可以根据下列图片,编写出相应代码,然后在评论区贴出来哦。
-
上图就是一个使用选择排序将一个数组中数据从小到大排序的过程,请思考如何用代码实现上述过程。
原理:每一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
本关难度较大,但这是学习数组绕不过去的一关,多思考,多尝试,你能成功的,加油!
编程要求
在右侧
Begin-End
区域中添加代码,实现对数组arr
的降序排序,并输出排序后的arr
数组。测试说明
我会对你的程序进行测试; 预期输入:
6
,6
,5
,0
,2
,8
,9
预期输出:[9, 8, 6, 5, 2, 0]
预期输入:
4
,3
,12
,1
,13
预期输出:[13, 12, 3, 1]
开始你的任务吧,祝你成功!
-
参考代码:
-
package step4; import java.util.Arrays; import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { Scanner sc = new Scanner(System.in); //动态创建数组 int[] arr = new int[sc.nextInt()]; for(int i = 0 ; i< arr.length ; i++){ arr[i] = sc.nextInt(); } /********** Begin **********/ int max=arr[0]; for(int i=0;i<arr.length;i++){ if(max<arr[i]){ max=arr[i]; } } for(int i=0;i<arr.length-1;i++){ if(arr[0]<arr[i+1]){ int temp=arr[0]; arr[0]=arr[i+1]; arr[i+1]=temp; } } for(int i=1;i<arr.length-1;i++){ if(arr[1]<arr[i+1]){ int temp=arr[1]; arr[1]=arr[i+1]; arr[i+1]=temp; } } for(int i=2;i<arr.length-1;i++){ if(arr[2]<arr[i+1]){ int temp=arr[2]; arr[2]=arr[i+1]; arr[i+1]=temp; } } for(int i=3;i<arr.length-1;i++){ if(arr[3]<arr[i+1]){ int temp=arr[3]; arr[3]=arr[i+1]; arr[i+1]=temp; } } for(int i=4;i<arr.length-1;i++){ if(arr[4]<arr[i+1]){ int temp=arr[4]; arr[4]=arr[i+1]; arr[i+1]=temp; } } System.out.println(Arrays.toString(arr)); /********** End **********/ } }
头歌平台Java程序设计 java入门-数组进阶 第4关:选择排序
最新推荐文章于 2023-11-10 12:34:03 发布