2013-02-25 2 views
0

Я пытаюсь сортировать слова, используя сортировку пузырьков, но не могу понять, что это за ошибка. Моя подкачка работает, но не может сортировать ее правильно.Сортировка слов с использованием bubblesort

void sortByWord (struct node** head) { 
    struct node* temp = (*head); 
    struct node* temp2 = (*head); 

    int i; 
    int j; 
    int counter = 0; 
    while(temp != NULL) 
    { 
     temp = nodeGetNextNode(temp); 
     counter++; 
    } 
    for(i = 1; i<counter; i++) 
    { 
     temp2=(*head); 
     for(j = 1; j<counter-1;j++) 
     { 
      if(wordCmpare(temp2,nodeGetNextNode(temp2))>0) 
      { 
       swap(head,temp2,nodeGetNextNode(temp2)); 
       continue; 
      } 
     } 
     temp2 = nodeGetNextNode(temp2); 
    } 
} 
+0

Вы пробовали * отладки * это? – WhozCraig

+0

Если вы говорите, что что-то не работает, вы должны показать результат, ожидаемый результат и весь код, относящийся к той части ошибки. – noMAD

ответ

1

continue продолжает внутренний цикл. Возможно, вам нужно добавить goto или флаг.

for(i = 1; i<counter; i++) 
    { 
     temp2=(*head); 
     for(j = 1; j<counter-1;j++) 
     { 
      if(wordCmpare(temp2,nodeGetNextNode(temp2))>0) 
      { 
       swap(head,temp2,nodeGetNextNode(temp2)); 
       goto endOfLoop; 
      } 
     } 

     temp2 = nodeGetNextNode(temp2); // BTW: This line does nothing useful 
endOfLoop:  
     ; 
    } 

Это флаг часть:

for(i = 1; i<counter; i++) 
    { 
    temp2=(*head); 
    boolean flag = false; 
    for(j = 1; j<counter-1;j++) 
    { 
     if(wordCmpare(temp2,nodeGetNextNode(temp2))>0) 
     { 
      swap(head,temp2,nodeGetNextNode(temp2)); 
      flag = true; 
      break; 
     } 
    } 
    if (flag) continue; 
    temp2 = nodeGetNextNode(temp2); // BTW: This line does nothing useful 
} 
+3

C не имеет 'continue' с ярлыками. – interjay

+0

Чтобы сделать что-то подобное, вам нужно 'goto label;'. –

+0

@interjay Duh. Изменено. –