0

(这是一个项目,所以是的,这是家庭作业)

任务是使用用户输入创建数组(我能够做到),然后对于第二部分,使用单独的方法按升序对数组进行排序,然后将其输出。我已经让它做我需要的一切,除了我不知道如何让它排序。指示说使用从 0 到长度的 while 循环来找到最小值,然后将其与第一个交换,但我不知道该怎么做。这是我到目前为止所拥有的:

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int storage = getNumDigits(in);
    if(storage == 0){
        System.out.print("No digits to store? OK, goodbye!");
        System.exit(0);
    }
    int []a = new int [storage];
    a = getDigits(a, in);
    displayDigits(a);
    selectionSort(a);
}

private static int getNumDigits(Scanner inScanner) {
    System.out.print("Please enter the number of digits to be stored: ");
    int stored = inScanner.nextInt();
        while(stored < 0){
        System.out.println("ERROR! You must enter a non-negative number of digits!");
        System.out.println();
        System.out.print("Please enter the number of digits to be stored: ");
        stored = inScanner.nextInt();
        }
    return stored;
}

private static int[] getDigits(int[] digits, Scanner inScanner) {
    int length = digits.length;
    int count = 0; 
    int toBeStored = 0;
    while(count < length){
    System.out.print("Enter integer " +count +": ");
    toBeStored = inScanner.nextInt();
    digits[count] = toBeStored;
    count++;
    }
    return digits;
}

private static void displayDigits(int[] digits) {
    int len = digits.length;
    System.out.println();
    System.out.println("Array before sorting:");
    System.out.println("Number of digits in array: " +len);
    System.out.print("Digits in array: ");
    for(int cnt = 0; cnt < len-1; cnt++){
        System.out.print(digits[cnt] + ", ");
    }
    System.out.println(digits[len-1]);
}

private static void selectionSort(int[] digits) {
    int l = digits.length;
    System.out.println();
    System.out.println("Array after sorting:");
    System.out.println("Number of digits in array: " +l);
    System.out.print("Digits in array: ");
    int index = 0;
    int value = digits[0];
    int indVal = digits[index];
    while(index < l){
        indVal = digits[index];
        if(indVal <= value){
            indVal = value;
            digits[index] = value;
            index++;
        }
        else if(value < indVal){
            index++;
        }
        System.out.print(value);
        //This is where I don't know what to do.
    }
}
4

3 回答 3

7

你被要求写选择排序。这是一个简单的 O(n 2 ) 算法。您只需要两个 for 循环。对于外部 for 循环的每次迭代,内部 for 循环搜索列表的未排序部分并找到最小元素。如您所见,最小元素与列表中未排序部分的第一个元素交换。

选择排序

于 2013-10-27T03:51:39.980 回答
0
  • 首先假设数组中的第一项是最小的。
  • 您需要跟踪它的值及其在数组中的位置。
  • 然后,您将需要遍历数组的其余部分以寻找较小的项目。
  • 一旦你知道了最小项的索引,只需交换两者即可:

    临时=数组[0];

    数组[0] = 数组[索引];

    数组[索引] = 温度;

于 2013-10-27T03:55:49.120 回答
0

您提到的方法名称是selectionSort,我认为您应该在这里使用选择排序代码。

private static void selectionSort(int[] digits) { int len = digits.length;

    /* Selection sort starts */
    for (int i = 0; i < len; i++) {   
        int min = i;   
        for (int j = i + 1; j < len; j++) {   
            if (digits[j]<digits[min]) {   
                min = j;   
            }   
        }   
        /**
         * Swap data
         */
        int temp = digits[i];
        digits[i] = digits[min];
        digits[min] = temp;
    } 

    /* Selection sort ends */

    /* Print necessary information here */
    System.out.println();
    System.out.println("Array after sorting:");
    System.out.println("Number of digits in array: " +len);
    System.out.print("Digits in array: ");
   /* Print digit  */ 
    for(int cnt = 0; cnt < len-1; cnt++){
        System.out.print(digits[cnt] + ", ");
    }
    System.out.println(digits[len-1]);
}

上面是一个例子,但是你最好把打印数组信息的逻辑放在方法 selectionSort 排序之后,因为这个方法应该只用于排序而不是打印。

于 2013-10-27T04:06:57.440 回答