鱼C论坛

 找回密码
 立即注册
查看: 3099|回复: 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[i]=in.nextInt();
        int []b=shuzu(num);
        for(i=0;i<num.length;i++)
                System.out.print(b[i]+" ");
        }
        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[i])
                                        mini=j;
                        }
                        temp=a[i];
                        a[i]=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[i]?????

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

class selsct {
        
        public static void main(String[] args) {
                int n = Integer.parseInt( JOptionPane.showInputDialog( "请输入数组大小" ) );
                int num[] = new int[n];
                Scanner in = new Scanner( System.in );
                int i = 0;
                System.out.println("请输入数组的值");
                for (i = 0; i < num.length; i++)
                {
                        num[ i ] = in.nextInt( );
                }
                in.close();
                int[] b = selectSort(num);
                for (i = 0; i < num.length; i++)
                        System.out.print(b[i] + " ");
                
                
        }

        public static int[] selectSort(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])
                                        mini = j;
                        }
                        temp = a[i];
                        a[i] = a[mini];
                        a[mini] = temp;
                }
                return a;
        }
}
请输入数组的值
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修改的时候红叉叉好多
import java.util.Scanner;
import javax.swing.*;

public class Main {

        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[i] = in.nextInt();
                int[] b = shuzu(num,in);
                for (i = 0; i < num.length; i++)
                        System.out.print(b[i] + " ");
        }

        //选择排序 从小到大
        public static int[] shuzu(int a[],Scanner in) {
                int j, i, temp,mini;
                for (i = 0; i < a.length; i++) {
                        //mini用于存储最小值的下标
                        mini = i;
                        //temp用于存储最小值
                        temp = a[i];
                        //下面这个循环结束后,最小值存在temp里,最小值的下标存在j中
                        for (j = i+1 ; j < a.length; j++) {
                                if (a[j] <= temp)
                                {
                                        mini = j;
                                        temp = a[j];
                                }        
                        }
                        //此时进行交换
                        temp = a[i];
                        a[i] = a[mini];
                        a[mini] = temp;
                }
                return a;
        }
}
这个是可以正常运行的代码
请输入数组的值
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[i]?????

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

class selsct {
        
        public static void main(String[] args) {
                int n = Integer.parseInt( JOptionPane.showInputDialog( "请输入数组大小" ) );
                int num[] = new int[n];
                Scanner in = new Scanner( System.in );
                int i = 0;
                System.out.println("请输入数组的值");
                for (i = 0; i < num.length; i++)
                {
                        num[ i ] = in.nextInt( );
                }
                in.close();
                int[] b = selectSort(num);
                for (i = 0; i < num.length; i++)
                        System.out.print(b[i] + " ");
                
                
        }

        public static int[] selectSort(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])
                                        mini = j;
                        }
                        temp = a[i];
                        a[i] = a[mini];
                        a[mini] = temp;
                }
                return a;
        }
}
请输入数组的值
1 1 1 5 4
1 1 1 4 5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 06:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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