Java Bucket Сортировка элементов в другом массиве - PullRequest
0 голосов
/ 29 ноября 2018

Я только недавно начал изучать Java, а сегодня я узнал, как я могу сделать так называемую сортировку выбора.Последние 3 часа я пытался выполнить сортировку сегментов, но есть некоторые части, которые я не знаю, как кодировать. Важно : Я полностью изучаю Java с книгой.Я не студент, и я занимаюсь этим как хобби.Я уже погуглил все, что мог придумать, и не нашел решения.У меня нет учителя или кого-либо, кого я мог бы попросить, так что да, любая помощь будет оценена!

Код:

private int[] bucketSort() {
    int[]bucket=new int[maxSize+1];
    int[]sortedElements = new int[elementaros.length];
    for(int i=0; i<elementaros.length;i++) {
        bucket[elementaros[i]]++; //it says that I can't convert from Car to int. How can I add the elements of array elemenators to bucket?
    }
    int outPos = 0;
    for (int j = 0; j < bucket.length; j++){
        for (int k = 0; k < bucket[i]; k++){
            sortedElements[outPos++] = i;
        }
    }
    return bucket; 
}

Идея кода :

У меня есть элементы массива типа Car (Car - это еще один класс моей программы).Похоже на это - Car[] elementaros.int maxSize показывает максимальное количество управляемых Car объектов.Я хочу сделать следующее: я хочу отсортировать элементы в массиве elementaros по алфавиту.Я был бы очень признателен, если бы у кого-нибудь было время показать мне, как это будет работать с примером кода или просто дать мне несколько советов.Как я уже сказал - у меня нет никого, кого я могу спросить.

1 Ответ

0 голосов
/ 29 ноября 2018

Выбор сортировки представляет собой комбинацию поиска и сортировки.

Принцип довольно прост, но я всегда предпочитаю диаграмму, чем огромные объяснения.

enter image description here

Начать указатель в начале вашегоunsorted массив.Затем для каждого значения массива ищите минимальное значение (или ищите автомобиль в алфавитном порядке) в вашем массиве и переключайте положение основанного Car с помощью указателя (который тоже Car)

Затем вы можете продвинуть указатель на следующий элемент массива.

Вот базовая реализация для этого

public static Car[] doSelectionSort(Car[] elementaros) {

    for (int i = 0; i < elementaros.length - 1; i++) {
        int index = i;
        for (int j = i + 1; j < elementaros.length; j++) {
            if (elementaros[j].getName().compareTo(elementaros[index].getName()) < 0) {
                index = j;
            }
        }

        Car nextOrderedCar = elementaros[index];
        elementaros[index] = elementaros[i];
        elementaros[i] = nextOrderedCar;

    }

    return elementaros;

}

Просто, например, ради, я представляю ваш объекттипа Car имеет имя, которое мы могли бы использовать для сравнения.

ОБНОВЛЕНИЕ 1:

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

Я нашел здесь реализацию, которая делает свое дело:

Надеюсь, это поможет.

...