所以我有类似的东西:
struct Something
{
int number;
Something* next;
};
我希望按数字对它们进行排序,虽然我不想更改数字,但我想将指针更改为下一个。
我该怎么做?
我知道“列表”的结束和开头,(FIFO顺序)
答案 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;对于排序数组的每个元素更新下一个指针