Lucas_Abbatepaolo 22 de nov. de 2011
tenta assim
private void bubbleSort () {
for ( int i = 0 ; i < size - 1; i++) {
boolean changed = false ;
for ( int j = 0 ; j < size - i - 1; j++) {
Node aux = get ( j ) ;
if ( aux .getValue () & gt ; aux.getNext().getValue()) {
Node temp1 = get ( j ) ;
Node temp2 = get ( j + 1 ) ;
temp1 .setNext ( temp2 .getNext ()) ;
temp2 .setNext ( temp1 ) ;
temp2 .setPrev ( temp1 .getPrev ()) ;
temp1 .setPrev ( temp2 ) ;
changed = true ;
}
}
if ( ! changed )
return ;
}
}
Vinicius_Zibetti_Res 22 de nov. de 2011
Null Pointer Excepetion amigo, nesse teu exemplo ai.
Vinicius_Zibetti_Res 22 de nov. de 2011
Gente refiz uma implementação aqui, mas ta com problema ainda…
Ela some alguns valores da lista… Não consigo detectar o erro.
public Node get ( int i ) {
if ( ! isEmpty ()) {
int j = 0 ;
Node element = head ;
while ( j ++ & lt ; i ) {
element = element . getNext ();
if ( element == null )
return null ;
}
return element ;
}
return null ;
}
private void bubbleSort () {
for ( int i = 0 ; i & lt ; size - 1 ; i ++ ) {
boolean changed = false ;
for ( int j = 0 ; j & lt ; size - i - 1 ; j ++ ) {
if ( get ( j + 1 ) != null ) {
if ( get ( j ). getValue () & gt ; get ( j + 1 ). getValue ()) {
//System.out.println("Swapping: " + get(j).getValue() + " : " + get(j + 1).getValue());
swap ( get ( j ), get ( j + 1 ));
changed = true ;
}
}
}
if ( ! changed )
return ;
}
}
public void swap ( Node first , Node mid ) {
if ( first == head )
head = mid ;
if ( mid == tail ) {
tail = first ;
}
first . setNext ( mid . getNext ());
mid . setPrev ( first . getPrev ());
first . setPrev ( mid );
mid . setNext ( first );
}
Lista:
3 - > Head
7
5
0
9
24
5
4 - > Tail
Retornou:
3 - > Head
7
9
24 - > Tail
Vinicius_Zibetti_Res 22 de nov. de 2011
Agora funcionando..
private void bubbleSort () {
for ( Node i = head ; i != null; i = i.getNext()) {
boolean changed = false ;
for ( Node j = head ; j != null; j = j.getNext()) {
if ( j .getNext () != null ) {
if ( j .getValue () & gt ; j.getNext().getValue()) {
swap ( j , j .getNext ()) ;
changed = true ;
}
}
}
if ( ! changed )
return ;
}
}
void swap ( Node first , Node second ) {
if ( first == head ) {
head = second ;
}
if ( second == tail ) {
tail = first ;
}
Node temp = first .getNext () ;
first .setNext ( second .getNext ()) ;
second .setNext ( temp ) ;
if ( first .getNext () != null ) {
first .getNext () .setPrev ( first ) ;
}
if ( second .getNext () != null ) {
second .getNext () .setPrev ( second ) ;
}
temp = first .getPrev () ;
first .setPrev ( second .getPrev ()) ;
second .setPrev ( temp ) ;
if ( first .getPrev () != null ) {
first .getPrev () .setNext ( first ) ;
}
if ( second .getPrev () == null ) {
return ;
}
second .getPrev () .setNext ( second ) ;
}