鱼C论坛

 找回密码
 立即注册
查看: 2689|回复: 3

[已解决]选择排序

[复制链接]
发表于 2018-3-22 19:15:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这个选择排序当输入数字不同时,可以正常工作,可是数字一有重复就不行了,为什么啊???
2.png
import java.util.Scanner;
import javax.swing.*;
public class selsct {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                int n=Integer.parseInt(JOptionPane.showInputDialog("请输入数组规模:"));
                int num[]=new int [n];
                Scanner in=new Scanner(System.in);
        int i;
        System.out.println("请输入数组的值");
        for(i=0;i<num.length;i++)
                num=in.nextInt();
        int []b=shuzu(num);
        for(i=0;i<num.length;i++)
                System.out.print(b+" ");
        }
        public static int []shuzu(int a[])
        {
                int j,i,temp;
                for(i=0;i<a.length-1;i++)
                {
                        int mini=i;
                        for(j=i+1;j<a.length;j++)
                        {
                                if(a[j]<=a)
                                        mini=j;
                        }
                        temp=a;
                        a=a[mini];
                        a[mini]=temp;       
                }
                return a;
        }
}
最佳答案
2018-4-11 15:18:11
本帖最后由 风扫地 于 2018-4-11 15:24 编辑

num=in.nextInt();  //这是什么鬼  整数可以直接赋值给数组的引用?
a[j] <= a   //同上
temp = a;  //同上
a = a[mini]; //同上
for (i = 0; i < num.length; i++)
  system.out.println(b + "") ; //到底要输出引用(地址)还是输出数组元素

數組和數組元素能直接赋值?可以直接通过b输出b?????

修改了一下测试貌似没楼主说的问题:
  1. import java.util.Scanner;
  2. import javax.swing.JOptionPane;

  3. class selsct {
  4.        
  5.         public static void main(String[] args) {
  6.                 int n = Integer.parseInt( JOptionPane.showInputDialog( "请输入数组大小" ) );
  7.                 int num[] = new int[n];
  8.                 Scanner in = new Scanner( System.in );
  9.                 int i = 0;
  10.                 System.out.println("请输入数组的值");
  11.                 for (i = 0; i < num.length; i++)
  12.                 {
  13.                         num[ i ] = in.nextInt( );
  14.                 }
  15.                 in.close();
  16.                 int[] b = selectSort(num);
  17.                 for (i = 0; i < num.length; i++)
  18.                         System.out.print(b[i] + " ");
  19.                
  20.                
  21.         }

  22.         public static int[] selectSort(int a[]) {
  23.                 int j, i, temp;
  24.                 for (i = 0; i < ( a.length - 1 ); i++ ){
  25.                         int mini = i;
  26.                         for (j = i + 1; j < a.length; j++) {
  27.                                 if (a[j] <= a[mini])
  28.                                         mini = j;
  29.                         }
  30.                         temp = a[i];
  31.                         a[i] = a[mini];
  32.                         a[mini] = temp;
  33.                 }
  34.                 return a;
  35.         }
  36. }
复制代码

请输入数组的值
1 1 1 5 4
1 1 1 4 5
3.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-26 14:14:40 | 显示全部楼层
shuzu()这个方法中第二层for循环if(a[j]<=a) 是什么鬼啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-11 10:37:37 | 显示全部楼层
LL原来的代码逻辑有一些问题,不知道是不是拷贝的时候出错了。我复制进Eclipse修改的时候红叉叉好多
  1. import java.util.Scanner;
  2. import javax.swing.*;

  3. public class Main {

  4.         public static void main(String[] args) {
  5.                 // TODO Auto-generated method stub
  6.                 int n = Integer.parseInt(JOptionPane.showInputDialog("请输入数组规模:"));
  7.                 int num[] = new int[n];
  8.                 Scanner in = new Scanner(System.in);
  9.                 int i;
  10.                 System.out.println("请输入数组的值");
  11.                 for (i = 0; i < num.length; i++)
  12.                         num[i] = in.nextInt();
  13.                 int[] b = shuzu(num,in);
  14.                 for (i = 0; i < num.length; i++)
  15.                         System.out.print(b[i] + " ");
  16.         }

  17.         //选择排序 从小到大
  18.         public static int[] shuzu(int a[],Scanner in) {
  19.                 int j, i, temp,mini;
  20.                 for (i = 0; i < a.length; i++) {
  21.                         //mini用于存储最小值的下标
  22.                         mini = i;
  23.                         //temp用于存储最小值
  24.                         temp = a[i];
  25.                         //下面这个循环结束后,最小值存在temp里,最小值的下标存在j中
  26.                         for (j = i+1 ; j < a.length; j++) {
  27.                                 if (a[j] <= temp)
  28.                                 {
  29.                                         mini = j;
  30.                                         temp = a[j];
  31.                                 }       
  32.                         }
  33.                         //此时进行交换
  34.                         temp = a[i];
  35.                         a[i] = a[mini];
  36.                         a[mini] = temp;
  37.                 }
  38.                 return a;
  39.         }
  40. }
复制代码

这个是可以正常运行的代码
请输入数组的值
5 4 3 0 0
0 0 3 4 5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-11 15:18:11 | 显示全部楼层    本楼为最佳答案   
本帖最后由 风扫地 于 2018-4-11 15:24 编辑

num=in.nextInt();  //这是什么鬼  整数可以直接赋值给数组的引用?
a[j] <= a   //同上
temp = a;  //同上
a = a[mini]; //同上
for (i = 0; i < num.length; i++)
  system.out.println(b + "") ; //到底要输出引用(地址)还是输出数组元素

數組和數組元素能直接赋值?可以直接通过b输出b?????

修改了一下测试貌似没楼主说的问题:
  1. import java.util.Scanner;
  2. import javax.swing.JOptionPane;

  3. class selsct {
  4.        
  5.         public static void main(String[] args) {
  6.                 int n = Integer.parseInt( JOptionPane.showInputDialog( "请输入数组大小" ) );
  7.                 int num[] = new int[n];
  8.                 Scanner in = new Scanner( System.in );
  9.                 int i = 0;
  10.                 System.out.println("请输入数组的值");
  11.                 for (i = 0; i < num.length; i++)
  12.                 {
  13.                         num[ i ] = in.nextInt( );
  14.                 }
  15.                 in.close();
  16.                 int[] b = selectSort(num);
  17.                 for (i = 0; i < num.length; i++)
  18.                         System.out.print(b[i] + " ");
  19.                
  20.                
  21.         }

  22.         public static int[] selectSort(int a[]) {
  23.                 int j, i, temp;
  24.                 for (i = 0; i < ( a.length - 1 ); i++ ){
  25.                         int mini = i;
  26.                         for (j = i + 1; j < a.length; j++) {
  27.                                 if (a[j] <= a[mini])
  28.                                         mini = j;
  29.                         }
  30.                         temp = a[i];
  31.                         a[i] = a[mini];
  32.                         a[mini] = temp;
  33.                 }
  34.                 return a;
  35.         }
  36. }
复制代码

请输入数组的值
1 1 1 5 4
1 1 1 4 5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 21:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表