Как реализовать сортировку по убыванию

Метод, который я должен создать, должен принимать в качестве параметра массив целых чисел и возвращать массив целых чисел, содержимое которого отсортировано в порядке убывания — от большего к меньшему. Примечание. В реализации этого метода не должны использоваться никакие библиотеки.

Я попытался использовать обычную сортировку выбора и использовать своп в конце, но только что произошли синтаксические ошибки:

public static int[] reverseSelectionSort(int[] arrayToBeSorted) {
    // implementation of Task 3 goes here
    for(int i = 0; i < arrayToBeSorted.length; i++){
        int maxPosition=i;
        int minPosition=i;
        for(int j = i+1; j < arrayToBeSorted.length - i; j++){
            if(arrayToBeSorted[j] < arrayToBeSorted[minPosition]){
                minPosition = j;
            }
            if(arrayToBeSorted[j] > arrayToBeSorted[maxPosition]){
                maxPosition = j;
            }
        }
        swap(arrayToBeSorted,minPosition,maxPosition);
        swap(arrayToBeSorted,maxPosition,i);
        swap(arrayToBeSorted,minPosition,arrayToBeSorted.length-i-1);
    }
    return arrayToBeSorted; // change this to return the sorted array
}

public static void main(String[] args) {
    int[] array2 = {3, 6, 8, 3, 5, 7, 1};
    int[] sorted = reverseSelectionSort(array2);

    System.out.print("task: [");

    for (int i = 0; i < sorted.length; i++) {
        if (i > 0) {
            System.out.print(", ");
        }

        System.out.print(sorted[i]);
    }

    System.out.println("]");
}

Если вы вызываете метод для массива [3, 6, 8, 3, 5, 7, 1], то метод должен вернуть массив [8, 7, 6, 5, 3, 3, 1].


person Walter Munemo    schedule 30.07.2019    source источник
comment
Дубликат: stackoverflow.com/questions/52373766/   -  person Harshal Parekh    schedule 30.07.2019


Ответы (1)


Как только вы добавите реализацию swap в свой код (и поместите все это в класс), он выдаст именно тот результат, который вы хотели. Возможно, вы думали, что swap — это java-уитл, который предназначен для коллекций, но массив — это не коллекция. Так что очень мало что изменилось в приведенном ниже:

    public class soSelect{ //embed in class, added
public static int[] reverseSelectionSort(int[] arrayToBeSorted) {
    // implementation of Task 3 goes here
    for(int i = 0; i < arrayToBeSorted.length; i++){
    int maxPosition=i;
    int minPosition=i;
    for(int j = i+1; j < arrayToBeSorted.length - i; j++){
        if(arrayToBeSorted[j] < arrayToBeSorted[minPosition]){
            minPosition = j;
        }
        if(arrayToBeSorted[j] > arrayToBeSorted[maxPosition]){
            maxPosition = j;
        }
    }
    swap(arrayToBeSorted,minPosition,maxPosition);
    swap(arrayToBeSorted,maxPosition,i);
    swap(arrayToBeSorted,minPosition,arrayToBeSorted.length-i-1);
}
    return arrayToBeSorted; // change this to return the sorted array
}
public static void swap(int[] a, int i, int j){ //had to implement it
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
}
public static void main(String[] args) {
    int[] array2 = {3, 6, 8, 3, 5, 7, 1};
    int[] sorted = reverseSelectionSort(array2);

    System.out.print("task: [");

    for (int i = 0; i < sorted.length; i++) {
        if (i > 0) {
            System.out.print(", ");
        }

        System.out.print(sorted[i]);
    }

    System.out.println("]");
}
}//added outer brace

Я запустил его в java doodle и напечатал:

task: [8, 7, 6, 5, 3, 3, 1]

Я не проверял дальше этого, но это должно, по крайней мере, вывести вас из тупика или, в лучшем случае, закончить. Наверняка вы могли бы сравнить с реализацией, на которую указывает приведенный выше комментарий.

person Jeremy Kahan    schedule 30.07.2019