对包含指向下一个指针的结构进行排序

时间:2015-03-13 10:01:21

标签: c++ algorithm pointers

所以我有类似的东西:

struct Something
{
    int number;
    Something* next;
};

我希望按数字对它们进行排序,虽然我不想更改数字,但我想将指针更改为下一个。

我该怎么做?

我知道“列表”的结束和开头,(FIFO顺序)

3 个答案:

答案 0 :(得分:1)

将MergeSort用于链接列表:首先使用两个运行指针遍历列表,其中一个指针以两倍的速度前进。当你到达列表的末尾时,慢指针指向中间。拆分列表并递归排序,然后合并。

答案 1 :(得分:0)

有各种排序算法(http://www.sorting-algorithms.com/),到目前为止,我会在本例中使用随机选择算法。它看起来像:

void Something::SortAscending() {
   Something* current = next;
   Something* smallest = next;
   while( current ) {
      if( current->number < smallest->number ) {
         smallest = current;
      }
      current = current->next;
   }
   if( smallest != next )
      smallest->next = next;
   next = smallest;
   next->SortAscending();
}

但请注意,如果您获得了列表的头部,则不能使用我在上面提供的功能类型进行更改。

答案 2 :(得分:-2)

排序 - &gt;对于排序数组的每个元素更新下一个指针