本文章中所提到的题目来源于我的课程作业
如果大家有更好的解法可以在评论区留言
题目名称:排序
要求:编写程序,寻找输入数组按指定顺序排序之后的前几项。输入一个长度不限的整数或者字符串数组,选择排序方式升序或者降序,以及输出项 k,将数组按照指定方式排序,输出前 k 项。
比如:
输入
数组 25, 14, 19, 53, 19, 90, 53, 22, 84, 73 ,8
前 5 项
升序
结果为:
14
19
19
22
25
逆序
结果为:
90
84
73
53
53
1. package projectA;
2. import java.util.Scanner;
3. import java.io.*;
4. public class Main {
5. //主函数
6. public static void main(String[] args) {
7.
8. System.out.println("请在下方输入一个整型数组");
9. /*
10. 通过键盘输入数组
11. */
12. Scanner sc1=new Scanner(System.in);
13. /*
14. 因为是使用字符串作为中转媒介
15. 所以用nextline来读取Enter键前的所有的字符
16. */
17. String temp1=sc1.nextLine();
18. //split方法用来分割输入的字符串
19. String[] s=temp1.split(" ");
20. //定义一个无限制的数组
21. int[] arr=new int[s.length];
22. for(int i=0;i<s.length;i++){
23. //Integer.parseInt的作用是将字符串型数据转为int型数据
24. arr[i]=Integer.parseInt(s[i]);
25. }
26.
27. //输入“升序”或者“倒序”
28. System.out.println("请在下方输入倒序或者升序");
29. //从键盘读取数据
30. Scanner sc2=new Scanner(System.in);
31. String str1=sc2.nextLine();
32.
33. //临时变量
34. int temp=0;
35. //然后在选择结构语句中进行函数调用。
36. switch(str1) {
37. case "升序":
38. //冒泡排序升序
39. for(int i2 = 0 ;i2< arr.length -1; i2++){
40. for(int j = 0; j<arr.length-1-i2; j++){
41. if(arr[j]>arr[j+1]){
42. temp = arr[j];
43. arr[j] = arr[j+1];
44. arr[j+1] = temp;
45. }
46. }
47. }
48. break;
49. case "倒序":
50. //冒泡排序倒序
51. for(int i2 = 0 ;i2< arr.length -1; i2++){
52. for(int j = 0; j<arr.length-1-i2; j++){
53. if(arr[j]<arr[j+1]){
54. temp = arr[j];
55. arr[j] = arr[j+1];
56. arr[j+1] = temp;
57. }
58. }
59. }
60. break;
61.
62. }
63. //从键盘输入将要输出到屏幕上数组的范围(大小)
64. System.out.println("请在下方输入数组的显示范围");
65. Scanner sc3=new Scanner(System.in);
66. String str2=sc3.next();
67.
68. //类型转换
69. int temp3;
70. temp3 =Integer.parseInt(str2);
71.
72. //输出数组到屏幕
73. System.out.println("数组排序后:");
74.
75. for(int i = 0; i<temp3; i++){
76.
77. System.out.print(arr[i]+"\t");
78. }
79.
80. }
81. }
/*
题目的要求是先指定输出的范围
再选定是升序输出还是倒序输出
文中的代码和题目的要求恰好相反
不过我认为只要程序最终运行的效果一致就足够了
*/