【问题标题】:C - Insertion sort using linked list with unordered arrayC - 使用带有无序数组的链表进行插入排序
【发布时间】:2013-02-14 08:08:46
【问题描述】:
void insert(struct EMP* emp[])
{
    struct EMP* previous = NULL;
    struct EMP* current = top;

    int i;
    int j;

    previous = current;
    current = current -> next;

    for(i = 1; i < numEmps; i++)
    {
        j = i;
        while(j > 0 && previous -> id > current -> id)
        {
            previous = current;
            j--;
        }

        current = current -> next;
    }
}

所以,参数是一个无序数组,我想使用插入排序对其进行排序。我遇到的问题是它需要链接列表。有什么建议么?以上是我现有的不起作用的插入排序功能。

【问题讨论】:

  • 当然不行,你用previous还是NULL
  • 我认为 previous=current=top 所以那里没问题。
  • 我添加了先前等于当前的位置,然后当前等于下一个......它构建并运行,但排序没有任何变化。有什么想法吗?
  • 强制进行插入排序,因为如果我不得不对排序进行编码,我将heap-sort 原始向量。当然,如果没有算法要求,你总是可以在原始容器上使用std::sort 并称其为好。另一方面,如果你想对 same 链表进行排序,它是一种在恒定空间中合并排序的数据结构,因为它能够任意将节点指针指向新目标。

标签: c linked-list insertion-sort unordered


【解决方案1】:

我认为您需要更仔细地查看插入排序算法。本质上,它需要一个新的目标列表来添加元素(特别是在构建第二个列表时将元素插入到正确的位置)。因此,您误解的核心是认为这可以在单个列表上“就地”完成。

将第二个列表实现为链表会更明智、更容易,因为您需要能够在任意点有效地将元素插入到列表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 2020-07-06
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    相关资源
    最近更新 更多