Java黑皮书课后题第7章:*7.20(修改选择排序法)在7.11节中,使用了选择排序法对数组排序。改写7.11节程序,重复地在当前数组中找到最大值,然后将这个最大值与该数组中的最后一个数进行交换

7.20(修改选择排序法)在7.11节中,使用了选择排序法对数组排序。改写7.11节程序,重复地在当前数组中找到最大值,然后将这个最大值与该数组中的最后一个数进行交换

  • 题目
    • 题目描述
    • 破题
  • 代码
    • 运行实例

题目

题目描述

7.20(修改选择排序法)在7.11节中,使用了选择排序法对数组排序。改写7.11节程序,重复地在当前数组中找到最大值,然后将这个最大值与该数组中的最后一个数进行交换
编写一个测试程序,读取10个double型的数字,调用该方法,并显示排好序的数字

破题

  1. 主方法:声明一个int型对象,赋值为10(作为数组长度)
  2. 主方法:声明一个double型数组
  3. 主方法:获取输入的10个double值,并传值给数组
  4. 主方法:调用自定义选择排序法(方法名:ss),接收返回的double型数组
  5. 主方法:将刚刚接收到的数组输出
  6. ss方法:求传入数组的长度
  7. ss方法:声明一个double型对象,用于存储交换值
  8. ss方法:采用双层循环进行排序,最内层进行比较大小,并进行值的交换
  9. 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;}
}

运行实例

请输入10double值: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]


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部