huhuhu12138 发表于 2018-3-22 19:15:13

选择排序

这个选择排序当输入数字不同时,可以正常工作,可是数字一有重复就不行了,为什么啊???

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 ;
                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<=a)
                                        mini=j;
                        }
                        temp=a;
                        a=a;
                        a=temp;       
                }
                return a;
        }
}

renxiaole 发表于 2018-3-26 14:14:40

shuzu()这个方法中第二层for循环if(a<=a) 是什么鬼啊?

mgsky1 发表于 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;
                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,in);
                for (i = 0; i < num.length; i++)
                        System.out.print(b + " ");
        }

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

风扫地 发表于 2018-4-11 15:18:11

本帖最后由 风扫地 于 2018-4-11 15:24 编辑

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

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

修改了一下测试貌似没楼主说的问题:
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;
                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 + " ");
               
               
        }

        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 <= a)
                                        mini = j;
                        }
                        temp = a;
                        a = a;
                        a = temp;
                }
                return a;
        }
}

请输入数组的值
1 1 1 5 4
1 1 1 4 5
页: [1]
查看完整版本: 选择排序