2011-04-25 72 views
0

现在,我不担心效率,我只是在学习。我想知道是否有人可以帮助我学习一个简单的插入排序单链表。这是为了我的功课,所以我想了解它。下面是代码:简单的插入排序在一个单独的链表C++

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,所以我需要,因为它在被阅读对它进行排序节点是一个结构BTW。任何人都可以帮助我吗?

+0

发帖基本上略有不同(但仍不知所云)形式相同的问题是不会让你远在这里 – 2011-04-25 19:35:34

+0

我之前张贴了这个问题吗? – 2011-04-25 19:48:42

回答

0

看起来你在列表的最后添加了一个额外的节点。我怀疑你会在最后一个节点中结束未初始化的数据。

当前,您只是将每个新节点添加到列表的末尾。

而不是将每个节点添加到列表的末尾,您应该从前面遍历整个列表,并找到正确的排序位置。然后将节点插入到已排序的位置,而不是结尾(我相信这是您尝试在//insertion sort循环中实现的逻辑

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