0

バブル ソートを使用して単語を並べ替えようとしていますが、エラーの原因がわかりません。スワッピングは機能しますが、正しくソートできません。

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);
    }
}
4

1 に答える 1

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
}
于 2013-02-25T19:29:20.927 に答える