В коде есть класс под названием selectionsorter, который в основном должен правильно применять алгоритм selectionsort.Чтобы это сделать, нужно взять массив объектов, преобразовать этот массив в связанный список, используя узлы, а затем отсортировать этот список, используя метод сортировки, в котором в качестве аргумента используется пользовательский компаратор, исходящий из интерфейса компаратора.
Этот результат затем должен быть возвращен в виде очереди, помещая наименьший объект первым.Теперь я попробовал несколько вещей, но я просто не могу заставить его работать, я понимаю концепцию, только весь связанный список делает его чертовски запутанным.Я также написал для него тест, который сортирует целые числа, но этот класс должен иметь возможность сортировать любой объект.Также следует помнить о стабильности, что означает, что если вы сортируете массив строк, таких как «AA» и «AB», AA должны стоять на первом месте в списке, даже если они оба начинаются с буквы A.
Любая помощь будет приветствоваться, посколькуЯ действительно пытался часами, я просто застрял.
package basicsort;
import java.util.Comparator;
import sort.Queue;
import sort.Sort;
/**
*
*
*/
public class SelectionSorter<T> implements Sort {
private Node<T> list = new Node<>(null);
private static class Node<T> {
T item;
Node<T> next;
// creation of node object with the item
Node(T item) {
this.item = item;
next = null;
}
void print(){
print(this);
}
private void print(Node item){
System.out.println(item.item);
if (item.next != null) {
print(item.next);
}
}
}
public SelectionSorter(T[] objects) {
if (objects.length != 0) {
Node<T> temp = list;
for (int i = 0; i < objects.length; i++) {
// filling current node with object of array
temp.next = new Node<>(objects[i]);
temp = temp.next;
}
}
// in the constructor the items from
//the array are copied to the internal datastructure based on a list using nodes.
}
// smallest item front of the queue
@Override
public Queue sort(Comparator comparator) {
list.print();
// temp value for swapping
T temp;
Node<T> min;
Queue<T> sorted = new Queue<>();
for (Node<T> node1 = list; node1.next != null; node1 = node1.next) { //loopt niet fatsoenlijk
min = node1;
for (Node<T> node2 = node1.next; node2.next != null; node2 = node2.next) {
//System.out.println(node2.next.item +""+ min.next.item);
if (comparator.compare(node2.next.item, min.next.item) < 0) {
min = node2;
}
}
temp = node1.item;
node1.item = min.item;
min.item = temp;
sorted.put(node1.item);
}
// take the node
// compare nodes using compare method
// put sorted nodes into queue smallest first
// set minimum value
// irate through comparing each element to min value
// set compared element to min value if its smaller
// once done mark first element as done
// set min value to 2nd element of the list
// return this queue
return sorted;
}
}
@Test
public void sortTest() {
Integer[] objects = new Integer[]{
1, 5, 6, 4, 9, 7
};
Integer[] sortedObjects = new Integer[]{
// put objects here in correct order
1, 4, 5, 6, 7, 9
};
// correct queue for comparison
Queue sorted = new Queue();
for (Object ob : sortedObjects) {
sorted.put(ob);
}
Comparator<Integer> comparator = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
};
SelectionSorter<Integer> instance = new SelectionSorter(objects);
//instance.sort(comparator);
Queue result = instance.sort(comparator);
result.print();
// assertEquals(sorted, result);
//
// assertEquals(sorted.get(), result.get());
// assertEquals(sorted.get(), result.get());
// assertEquals(sorted.get(), result.get());
// assertEquals(sorted.get(), result.get());
// assertEquals(sorted.get(), result.get());
// assertEquals(sorted.get(), result.get());
}