选择排序不排序Java

时间:2018-08-23 03:47:41

标签: java arrays sorting

我正在使用Java进行选择排序。它将提示用户输入10个名称,然后按字母顺序对它们进行排序。它正在对其中一些进行排序,但未完全进行排序,因此无法弄清为什么对某些值进行排序而不对其他值进行排序。我相信我已经正确实现了排序和交换,但是感觉好像缺少一些东西。一如既往地感谢您的帮助。

import java.util.*;

public class sortingProgram {

    static String studentName[] = new String[10];
    static int i;
    static Scanner scnr = new Scanner(System.in);

    public static void enterNames() {
        for (i = 0; i < studentName.length; i++) {
            System.out.println("Please enter a student name: ");
            studentName[i] = scnr.nextLine();
        }
    }

    public static void sortNames(String sortArray[]) {
        int smallindex;
        for (int i = 0; i < sortArray.length; i++) {
            smallindex = i;
            for (int j = i + 1; j < sortArray.length; j++) {
                if (sortArray[j].compareTo(sortArray[smallindex]) < 0) {
                    smallindex = j;
                    if (smallindex != i)
                        swap(sortArray, smallindex, i);
                }
            }

        }
        System.out.println(Arrays.toString(sortArray));
    }

    public static void swap(Object a[], int i1, int j1) {
        Object temp = a[i1];
        a[i1] = a[j1];
        a[j1] = temp;
    }


    public static void main(String[] args) {
        // TODO Auto-generated method stub
        enterNames();
        sortNames(studentName);
    }
}

2 个答案:

答案 0 :(得分:0)

您做swap的时间太早了。您需要等到确定最小值后再进行交换。每当您检测到较小的那个时,您就在交换。

public static void sortNames(String sortArray[]) {
    for (int i = 0; i < sortArray.length; i++) {
        int smallindex = i;
        for (int j = i + 1; j < sortArray.length; j++) {
            if (sortArray[j].compareTo(sortArray[smallindex]) < 0) {
                smallindex = j;
                // Move this.
                //if (smallindex != i)
                //    swap(sortArray, smallindex, i);
            }
        }
        // To here.
        if (smallindex != i)
            swap(sortArray, smallindex, i);
    }
}

public static void swap(Object a[], int i1, int j1) {
    Object temp = a[i1];
    a[i1] = a[j1];
    a[j1] = temp;
}


private void test() {
    String[] names = {"C", "B", "A", "9"};
    System.out.println(Arrays.toString(names));
    sortNames(names);
    System.out.println(Arrays.toString(names));
}

答案 1 :(得分:0)

在程序中使用以下更改。

import java.util.*;

    public class SortingProgram {

        static String studentName[] = new String[10];
        static int i;
        static Scanner scnr = new Scanner(System.in);

        public static void enterNames() {
            for (i = 0; i < studentName.length; i++) {
                System.out.println("Please enter a student name: ");
                studentName[i] = scnr.nextLine();
            }
        }

        public static void sortNames(String sortArray[]) {
            int smallindex;
            for (int i = 0; i < sortArray.length; i++) {
                smallindex = i;
                for (int j = i + 1; j < sortArray.length; j++) {
                    if (sortArray[j].compareTo(sortArray[smallindex]) < 0) {
                        smallindex = j;
                        //if (smallindex != i) No need here
                        //swap(sortArray, smallindex, i);
                    }
                }
                //place your swaping code here
                if (smallindex != i)
                      swap(sortArray, smallindex, i);
            }
            System.out.println(Arrays.toString(sortArray));
        }

        public static void swap(Object a[], int i1, int j1) {
            Object temp = a[i1];
            a[i1] = a[j1];
            a[j1] = temp;
        }


        public static void main(String[] args) {
            // TODO Auto-generated method stub
            enterNames();
            sortNames(studentName);
        }
    }
进行这些更改后,

您的程序即可运行。您的代码无法正常运行,因为您需要尽早执行交换。