Функция сортировки вставки двусвязных списков: Почему моя функция сортировки вставок не вставляет последние два целочисленных ввода в мой связанный список?

1

Моя функция сортировки вставки, похоже, не вставляет мои последние два целых ввода: 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
  • 0
    Какой самый простой пример, который терпит неудачу? Можете ли вы добавить модульный тест, чтобы продемонстрировать это? Что вы видите, когда шагаете по коду в своем отладчике?
  • 0
    @PeterLawrey Я изменил свои входные данные только на 3 целых числа list.insertionSort(3); list.insertionSort(100); list.insertionSort(5); И результат, который я получил, был: 3 100 Таким образом, моя функция, кажется, опускает 5 в этом случае.
Теги:
doubly-linked-list
insertion-sort

1 ответ

0
Лучший ответ

У вас есть ошибка при n.getProb() <= curr.getProb() В вашем коде

n.setNext(curr);
n.setPrev(curr.getPrev());
curr.setPrev(n);

Вы

  1. установить следующий из n в curr - ok
  2. set prev of n to currPrev - ok
  3. set prev of curr to n - ошибка, вы пропустили ссылку на prev of curr и по-прежнему ссылаетесь на валюту

Та же проблема в вашей части 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);
            }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню