0

今のところ、私は効率について心配しておらず、ただ学んでいます。単独でリンクされたリストの単純な挿入ソートを学ぶのを手伝ってくれる人がいるのだろうかと思っていました。これは私の宿題なので、理解したいと思います。コードは次のとおりです。

char c[13];
    r >> c;
    r >> NumberOfInts;

    Node *node = new Node;
    head = node; //start of linked list

    for(int i = 0; i < NumberOfInts; i++) //this reads from the file and works
    {
        r >> node->data;
        cout << node->data << endl;
        node ->next = new Node; //creates a new node
        node = node->next;

        if(_sortRead) //true
        {
            for(int k = 0; k < i; k++)
            {
                         //insertion sort
            }
        }
    }

これまでのところ、istream に読み込ませたので、読み込まれたときに並べ替える必要があります。ノードは構造体です。誰か助けてくれませんか?

4

2 に答える 2

0

リストの最後にノードを 1 つ追加しているようです。最後のノードに初期化されていないデータが残ることになると思います。

現在、新しいノードをそれぞれリストの最後に追加しているだけです。

各ノードをリストの最後に追加する代わりに、リスト全体を先頭から繰り返し、正しいソート位置を見つける必要があります。次に、最後ではなく、そのソートされた場所にノードを挿入します(//insertion sortループに実装しようとしたロジックだと思います.

于 2011-04-25T19:36:20.500 に答える
0

STLに基づいて効果的なものを構築してみてください。順序付きリストがある場合は、lower_bound によって適切な場所を見つけることができます。

template<class T> std::list<T>::iterator insert( std::list<T> &my_list, const T &value )
{
  return my_list.insert( std::lower_bound( my_list.begin(), my_list.begin(), value ), value );
}
于 2011-04-25T19:46:56.450 に答える