A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王渠 中级黑马   /  2012-6-7 08:30  /  2251 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.util.Scanner;

  2. public class Exercise6_17 {
  3.         public static void main(String[] args) {
  4.                 double list[] = new double[10];
  5.                 Scanner input = new Scanner(System.in);
  6.                 System.out.print("Enter ten numbers: ");
  7.                 for (int i = 0; i < 10; i++) {
  8.                         list[i] = input.nextDouble();
  9.                 }
  10.                 list = selectionSort(list);
  11.                 for (int i = 0; i < list.length; i++)
  12.                         System.out.print(list[i] + " ");
  13.         }

  14.         public static double[] selectionSort(double[] list) {
  15.                 for (int i = list.length - 1; i >= 0; i--) {
  16.                         double max = list[i];
  17.                         int maxIndex = i;

  18.                         for (int j = 0; j < i - 1; j++) {
  19.                                 if (list[j] > max) {
  20.                                         max = list[j];
  21.                                         maxIndex = j;
  22.                                 }
  23.                         }

  24.                         if (maxIndex != i) {
  25.                                 list[maxIndex] = list[i];
  26.                                 list[i] = max;
  27.                         }
  28.                 }
  29.                 return list;
  30.         }
  31. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

14 个回复

倒序浏览
ttkl123654 发表于 2012-6-7 08:36
我没弄懂是出现的什么问题?是升序和降序的事?

我也没弄懂...
回复 使用道具 举报
你写的那个排序有点乱,没搞明白~~~我把以前写的给你发一下
  1. package cn.hncj.lianxi;

  2. public class SelectSortDemo {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 double[] list = {6.3,2.7,1.0,3.0};
  8.                 selectSort(list);
  9.                 StringBuilder sb = new StringBuilder();
  10.                 for(double d : list)
  11.                 {
  12.                         sb.append(d+",");
  13.                 }
  14.                 sb.deleteCharAt(sb.length()-1);
  15.                 System.out.println(new String(sb));

  16.         }
  17.        
  18.         public static void selectSort(double[] list)
  19.         {
  20.                 for(int x=0;x<list.length;x++)
  21.                 {
  22.                         for(int y=x;y<list.length;y++)
  23.                         {
  24.                                 if(list[x]>list[y])
  25.                                         swap(list,x,y);
  26.                                
  27.                         }
  28.                        
  29.                 }
  30.         }
  31.        
  32.         private static void swap(double[] list,int a,int b)
  33.         {
  34.                 double temp = list[a];
  35.                 list[a] = list[b];
  36.                 list[b] = temp;
  37.                
  38.         }

  39. }
复制代码
回复 使用道具 举报
ttkl123654 发表于 2012-6-7 08:44
不是,我想问的是问题是什么啊?
你不是说出问题了吗?是排列的顺序想按从大到小?还是什么问题啊? ...

在运行结果上面有问题
回复 使用道具 举报
ttkl123654 发表于 2012-6-7 08:53

要求的是用选择,不是冒泡,而且是选择大的,来进行排序,题目是这样的...
回复 使用道具 举报
  1. package cn.hncj.lianxi;

  2. public class SelectSortDemo {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 double[] list = {6.3,2.7,1.0,3.0};
  8.                 selectSort(list);
  9.                 StringBuilder sb = new StringBuilder();
  10.                 for(double d : list)
  11.                 {
  12.                         sb.append(d+",");
  13.                 }
  14.                 sb.deleteCharAt(sb.length()-1);
  15.                 System.out.println(new String(sb));

  16.         }
  17.        
  18.         public static void selectSort(double[] list)
  19.         {
  20.                 for(int x=0;x<list.length;x++)
  21.                 {
  22.                         for(int y=x;y<list.length;y++)
  23.                         {
  24.                                 if(list[x]<list[y])
  25.                                         swap(list,x,y);
  26.                                
  27.                         }
  28.                        
  29.                 }
  30.         }
  31.        
  32.         private static void swap(double[] list,int a,int b)
  33.         {
  34.                 double temp = list[a];
  35.                 list[a] = list[b];
  36.                 list[b] = temp;
  37.                
  38.         }

  39. }
复制代码
改一个地方就是选择大的
回复 使用道具 举报
本帖最后由 王渠 于 2012-6-7 09:07 编辑
丰亚彬 发表于 2012-6-7 08:58
改一个地方就是选择大的

{:3_54:}感觉你和另外一个回答的,都是用到了遍历,这样每次循环交换的次数会比较多,而我看选择法,选择最大的,放到正确位置,再选择其次,这样循环直到放好。
虽然用了是能解决问题,但还是不知道我出问题在哪儿....
回复 使用道具 举报
王渠 发表于 2012-6-7 09:05
感觉你和另外一个回答的,都是用到了遍历,而我看选择法,选择最大的,放到正确位置,再选择其次 ...

你不是要使用选择排序吗?你是想升序排列还是降序排列
回复 使用道具 举报
ttkl123654 发表于 2012-6-7 09:07

运行结果还是错误的。。。
回复 使用道具 举报
丰亚彬 发表于 2012-6-7 09:07
你不是要使用选择排序吗?你是想升序排列还是降序排列

升序的..选择最大的,放到最后面,接着在剩下的数组中找到最大的,放到倒数第二位,依此类推,直至数列中仅剩一个数。题目原话
回复 使用道具 举报
王渠 发表于 2012-6-7 09:05
感觉你和另外一个回答的,都是用到了遍历,这样每次循环交换的次数会比较多,而我看选择法,选择 ...

你的目的是选择排序,但是你的程序每次只记录了那个最大的但是你没有排序呀,所以你说你要排序但是程序表达的意思感觉是选择最大或者最小
回复 使用道具 举报
丰亚彬 发表于 2012-6-7 09:14
你的目的是选择排序,但是你的程序每次只记录了那个最大的但是你没有排序呀,所以你说你要排序但是程序表 ...

我是选择到最大的后,再判断最大的是否在正确的位置,如果不在,就交换,这就是我程序的意思
回复 使用道具 举报
王渠 发表于 2012-6-7 09:13
升序的..选择最大的,放到最后面,接着在剩下的数组中找到最大的,放到倒数第二位,依此类推,直至数列中 ...

嗯,对的,你排序算法就有问题,你只找到了那个最大的,你都没有和数组当前最后一个元素进行换位,你看看我给你发的那个代码

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
丰亚彬 发表于 2012-6-7 09:17
嗯,对的,你排序算法就有问题,你只找到了那个最大的,你都没有和数组当前最后一个元素进行换位,你看看 ...

这段代码就是用来判断位置是否正确并且排序的
  1.                         if (maxIndex != i) {
  2.                                 list[maxIndex] = list[i];
  3.                                 list[i] = max;
  4.                         }
复制代码
回复 使用道具 举报
  1. import java.util.Scanner;

  2. public class Exercise6_17 {
  3.         public static void main(String[] args) {
  4.                 double list[] = new double[10];
  5.                 Scanner input = new Scanner(System.in);
  6.                 System.out.print("Enter ten numbers: ");
  7.                 for (int i = 0; i < 10; i++) {
  8.                         list[i] = input.nextDouble();
  9.                 }
  10.                 list = selectionSort(list);
  11.                 for (int i = 0; i < list.length; i++)
  12.                         System.out.print(list[i] + " ");
  13.         }

  14.         public static double[] selectionSort(double[] list) {
  15.                 for (int i = list.length - 1; i >= 0; i--) {
  16.                         double max = list[i];
  17.                         int maxIndex = i;

  18.                         for (int j = 0; j < i; j++) {//找到错误原因...这里应该是j<i;而不是j< i - 1;
  19. if (list[j] > max) {
  20.                                         max = list[j];
  21.                                         maxIndex = j;
  22.                                 }
  23.                         }

  24.                         if (maxIndex != i) {
  25.                                 list[maxIndex] = list[i];
  26.                                 list[i] = max;
  27.                         }
  28.                 }
  29.                 return list;
  30.         }
  31. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马