Java黑皮书课后题第7章:*7.20(修改选择排序法)在7.11节中,使用了选择排序法对数组排序。改写7.11节程序,重复地在当前数组中找到最大值,然后将这个最大值与该数组中的最后一个数进行交换
7.20(修改选择排序法)在7.11节中,使用了选择排序法对数组排序。改写7.11节程序,重复地在当前数组中找到最大值,然后将这个最大值与该数组中的最后一个数进行交换
- 题目
- 题目描述
- 破题
- 代码
- 运行实例
题目
题目描述
7.20(修改选择排序法)在7.11节中,使用了选择排序法对数组排序。改写7.11节程序,重复地在当前数组中找到最大值,然后将这个最大值与该数组中的最后一个数进行交换
编写一个测试程序,读取10个double型的数字,调用该方法,并显示排好序的数字
破题
- 主方法:声明一个int型对象,赋值为10(作为数组长度)
- 主方法:声明一个double型数组
- 主方法:获取输入的10个double值,并传值给数组
- 主方法:调用自定义选择排序法(方法名:ss),接收返回的double型数组
- 主方法:将刚刚接收到的数组输出
- ss方法:求传入数组的长度
- ss方法:声明一个double型对象,用于存储交换值
- ss方法:采用双层循环进行排序,最内层进行比较大小,并进行值的交换
- ss方法:返回排序好的数组
代码
import java.util.Arrays;
import java.util.Scanner;public class Test7_20 {public static void main(String[] args) {//1. 主方法:声明一个int型对象,赋值为10(作为数组长度)int length = 10;//2. 主方法:声明一个double型数组double[] list = new double[length];//3. 主方法:获取输入的10个double值,并传值给数组Scanner input = new Scanner(System.in);System.out.print("请输入10个double值:");for (int i = 0 ; i < length ; i++){list[i] = input.nextDouble();}//4. 主方法:调用自定义选择排序法(方法名:ss),接收返回的double型数组list = ss(list);//5. 主方法:将刚刚接收到的数组输出System.out.print(Arrays.toString(list));}//ss方法:选择排序的自定义方法public static double[] ss(double[] list){//6. ss方法:求传入数组的长度int length = list.length;//7. ss方法:声明2个对象,用于存储交换值double temp = 0;int temp_index = 0;//8. ss方法:采用双层循环进行排序,最内层进行比较大小,并进行值的交换for (int i = length - 1 ; i > 0 ; i--){//找下标0到i的最大值下标temp_index = max(list, i);//比较list[temp_index]和list[i]的大小,如果大于则交换值if (list[temp_index] > list[i]){temp = list[temp_index];list[temp_index] = list[i];list[i] = temp;}}//9. ss方法:返回排序好的数组return list;}public static int max(double[] list, int i){//找传入的double数组从下标0到下标i的最大值int index = 0;double max = 0;for (int a = 0 ; a < i ; a++){if (max < list[a]){max = list[a];index = a;}}return index;}
}
运行实例
请输入10个double值:10 9 8 7 6 5 4 3 2 1
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
