Моя функция сортировки вставки, похоже, не вставляет мои последние два целых ввода: 15 и 8 в мой дважды связанный список. Мой выход не учитывает 15 и 8. Что я делаю неправильно в функции сортировки вставки? Я предоставил код, ввод и вывод моих функций. Спасибо.
Вот моя функция сортировки вставки:
public void insertionSort(int p)
{
Node n = new Node(p);
Node curr = head;
if(isEmpty())
{
head = n;
}
else
{
if(n.getProb() <= curr.getProb())
{
n.setNext(curr);
curr.setPrev(n);
head = n;
}
else if(n.getProb() > curr.getProb())
{
while(n.getProb() > curr.getProb() && curr.getNext() != null)
{
curr = curr.getNext();
}
if(n.getProb() < curr.getProb())
{
n.setNext(curr);
n.setPrev(curr.getPrev());
curr.setPrev(n);
}
else if(n.getProb() >= curr.getProb())
{
n.setNext(curr.getNext());
n.setPrev(curr);
curr.setNext(n);
}
}
}
size++;
}
Вот моя функция печати
public void printSortedList()
{
Node curr = head;
while(curr != null)
{
System.out.println(curr.getProb());
curr = curr.getNext();
}
}
Вот как я вхожу в свою основную функцию:
public static void main(String [] args)
{
List list = new List();
list.insertionSort(10);
list.insertionSort(5);
list.insertionSort(5);
list.insertionSort(60);
list.insertionSort(5);
list.insertionSort(10);
list.insertionSort(15);
list.insertionSort(8);
list.printSortedList();
}
Вот мой вывод:
5
5
5
10
10
60
У вас есть ошибка при n.getProb() <= curr.getProb()
В вашем коде
n.setNext(curr);
n.setPrev(curr.getPrev());
curr.setPrev(n);
Вы
Та же проблема в вашей части n.getProb() > curr.getProb()
.
Правильная установка:
if (n.getProb() <= curr.getProb()) {
n.setNext(curr);
n.setPrev(curr.getPrev());
if (curr.getPrev() != null)
curr.getPrev().setNext(n);//set next to curr prev
curr.setPrev(n);
} else if (n.getProb() > curr.getProb()) {
n.setNext(curr.getNext());
n.setPrev(curr);
if (curr.getNext() != null)
curr.getNext().setPrev(n);//set prev to curr next
curr.setNext(n);
}
list.insertionSort(3);
list.insertionSort(100);
list.insertionSort(5);
И результат, который я получил, был:3
100
Таким образом, моя функция, кажется, опускает 5 в этом случае.