2016-04-16 5 views
0

Этот сортировка вставки относится к двойному списку. Кажется, ничего не печатают. Извините, если это грязно. Я довольно новичок в публикации вещей. Я отлаживал его, добавляя sysout. Я считаю, что есть проблема с заменой, которую я использовал sysout & Я заметил, что именно здесь возникла проблема. Любая помощь будет принята с благодарностью. Я также проверил класс приложения, который кажется прекрасным.Swap In Insertion Sort Не работает в двукратном списке ссылок

public boolean insertionSort() 
{ 
if (getFirst().next != null) 
{ 
    return false; 
} 
    Link current = getFirst().next; 
    Link current2 = current; 

    while(current != null){ 
    current2 = current; 
    while(current2.prev != null){ 
     int tempID = Integer.valueOf(current2.Data.getID()); 
     int temp2ID = Integer.valueOf(current2.prev.Data.getID()); 
if(tempID < temp2ID) 
    { 
    swap(current2, current.prev); 
    } 
    current2 = current2.prev; 
} 
    current = current.next; 
} 
    return true; 
} 


public void swap(Link x, Link y) 
    {  

    Link previousNode1 = x.prev; 

    Link nextNode1 = x.next; 

    Link previousNode2 = y.prev; 

    Link nextNode2 = y.next; 


    if (x.next == y || y.next == x) 
    { 

     previousNode1.next = y; 

     y.prev = (previousNode1); 

     nextNode2.next = (x); 

     x.next = (nextNode2); 

     x.prev = (y); 

     y.next = (x); 
    } 


    else 
    { 
     y.prev = (previousNode1); 

     y.next = (nextNode1); 

     nextNode1.prev = (y); 

     previousNode1.next = (y); 

     x.prev = (previousNode2); 

     x.next = (nextNode2); 

     nextNode2.prev = (x); 

     previousNode2.next = (x); 
    } 

} // end swap 

ответ

0

Вы указали только часть своего кода. Поэтому трудно понять, что именно не так. Но на первый взгляд к вашей методе сортировки вставок, это то, что не так:. В самом начале у вас есть инструкции условия

if (getFirst().next != null){ 
    return false; 
} 

Это означает, что функция будет немедленно вернуться, если GetFirst() рядом находится не нулевое. Если поток программы удовлетворяет этому условию, то есть getFirst(). Next равно null, вы присваиваете этому нуль двум переменным current и current2. И затем вы запускаете цикл while с условием while(current != null){...}. Как эта функция должна что-то делать?

Во-первых, исправьте условие if. Вероятно, вам нужно вернуться только в том случае, если getFirst(). Next is null (not return, если он не является нулевым). Затем посмотрите, получаете ли вы нужный результат или нет. Если нет, просьба дать более подробную информацию о вашей проблеме.