Не сортирует листу

138
01 января 2020, 02:50
public class BubbleSort<Pojazd> implements ListSorter<Pojazd>{
    private final Comparator<Pojazd> _comarator;
public BubbleSort(Comparator<Pojazd> comparator){
    _comarator = comparator;   }
@Override
public ArrayList<Pojazd> sort(ArrayList<Pojazd> list) {
    int size = list.size();
    for (int pass = 1; pass<size; pass++){
        for (int left = 0; left < (size-pass); left++ ){
            int right = left+1;
            if (_comarator.compare(list.get(left), list.get(right))>0)
                swap(list,left,right);
        }
    }

    return null;
}
public void swap(ArrayList<Pojazd> list, int left, int right){
    Pojazd temp = list.get(left);
    list.set(left,list.get(right));
    list.set(right, temp);
}}

public class Main {
public static void main(String [] args){
ArrayList<Pojazd> arrayList = new ArrayList();
    arrayList.add(new Pojazd("Jeep"));
    arrayList.add(new Pojazd("Volkswagen"));
    arrayList.add(new Pojazd("Ford"));
    arrayList.add(new Pojazd("Mercedes"));
    arrayList.add(new Pojazd("Audi"));
    arrayList.add(new Pojazd("Nissan"));
    System.out.println(arrayList);

BubbleSort bubbleSort = new BubbleSort(new Comparator<Pojazd>() {
       @Override
       public int compare(Pojazd left, Pojazd right) {
           return 0;
       }
   });
bubbleSort.sort(arrayList);
    System.out.println(arrayList);

}

Вывод

[Nazwa: Jeep, Nazwa: Volkswagen, Nazwa: Ford, Nazwa: Mercedes, Nazwa: Audi, Nazwa: Nissan]
[Nazwa: Jeep, Nazwa: Volkswagen, Nazwa: Ford, Nazwa: Mercedes, Nazwa: Audi, Nazwa: Nissan]

Имлементирует :

import java.util.ArrayList;
public interface ListSorter<T> {
    public ArrayList<T> sort(ArrayList<T> list);
}

Тип

public class Pojazd {
private String nazwa;
public Pojazd(String n) {
    this.nazwa = n;
}
public String getName() {
    return nazwa;
}
public void setName(String name) {
    this.nazwa = nazwa;
}
public String toString() {
    return "Nazwa: " + this.nazwa ;
}
}

Подскажите пожалуйста, что вставлять в конструктор (там где Comparator), и как протестить время работы алгоритма, и почему он не сортирует

Answer 1

Ваша сортировка не работает, потому что компаратор всегда возвращает 0.

Чтобы список отсортировался возвращайте, например, разность длин названий:

return left.getName().length() - right.getName().length();

Время работы алгоритма можно замерить путём фиксации времени до и после вызова bubbleSort.sort(arrayList);

То есть:

long start = System.currentTimeMillis();
bubbleSort.sort(arrayList);
long end = System.currentTimeMillis();
System.out.println(end - start);

Метод System.currentTimeMillis() возвращает время в миллисекундах, если нужно время в наносекундах, то используйте System.nanoTime()

Answer 2
import java.util.ArrayList;
import java.util.List;
public class Pojazd {
    private String name;
    public Pojazd(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Nazwa: " + this.name;
    }
    public static List<Pojazd> bubbleSort(List<Pojazd> pojazds) {
        for (int i = 0; i < pojazds.size() - 1; i++) {
            for (int j = 0; j < pojazds.size() - i - 1; j++) {
                if (pojazds.get(j).getName().length() > pojazds.get(j + 1).getName().length()) {
                    Pojazd temp = pojazds.get(j);
                    pojazds.set(j, pojazds.get(j + 1));
                    pojazds.set(j + 1, temp);
                }
            }
        }
        return pojazds;
    }
    public static void main(String[] args) {
        List<Pojazd> pojazds = new ArrayList<>();
        pojazds.add(new Pojazd("Jeep"));
        pojazds.add(new Pojazd("Volkswagen"));
        pojazds.add(new Pojazd("Ford"));
        pojazds.add(new Pojazd("Mercedes"));
        pojazds.add(new Pojazd("Audi"));
        pojazds.add(new Pojazd("Nissan"));
        System.out.println(Pojazd.bubbleSort(pojazds));
    }
}
READ ALSO
Ошибка Can not connect to Ryuk

Ошибка Can not connect to Ryuk

Имеется конфиг для CircleCIНа локальной машине при выполнении CircleCI, все проходит

145
Логика приложения, использование кэша

Логика приложения, использование кэша

Я задался вопросом, как правильно хранить кэш ? Тоесть я хочу услышать предложение как лучше всего его хранитьНапример я думаю так: Качаем...

192
JavaFX стилизация кнопки &ldquo;с пропущенными&rdquo;

JavaFX стилизация кнопки “с пропущенными”

Имеется идея сделать на кнопке что-то вроде "напоминания о пропущенных" как на приложенном изображенииКак можно прицепить к кнопке такое...

166