使用链表进行插入排序
Insertion sort using linked list
(1)您将仅实现插入排序,(2)您将使用链接列表来存储长整数,而不是使用数组进行存储。因此,您的排序必须在链表上执行。
我的代码如下。
Node *Insertion_Sort(Node *sublist) {
//Initialize`enter code here`
Node *dummy_node = malloc(sizeof(Node));
dummy_node->next = NULL;
Node *prev_node = sublist;
Node *curr_node = sublist->next;
Node *head = prev_node;
Node *temp_node = malloc(sizeof(Node));
while(curr_node->next != NULL){
if (prev_node->value < curr_node->value) {
//advance the pointers
prev_node = curr_node;
if (curr_node != NULL) {
curr_node = curr_node->next;
printf("Advancing prev=%ld curr=%ldn", prev_node->value, curr_node->value);
}
else
{
break;
}
}
else
{
//swap
temp_node = curr_node;
prev_node->next = curr_node->next;
curr_node->next = prev_node;
// Advance
prev_node = curr_node;
curr_node = curr_node->next;
head = prev_node;
}
}
//curr_node->next = NULL;
return head;
}
但它只是部分工作。有人可以帮助我吗?
您不需要为节点分配任何空间。用于插入排序的 Wiki 链接。您可能应该使用第二个伪代码示例(其中 i 之前的部分被排序,并且您通过删除和插入节点插入到排序的部分):
for i ← 1 to length(A)
x ← A[i]
j ← i
while j > 0 and A[j-1] > x
A[j] ← A[j-1]
j ← j - 1
A[j] ← x
替换内部 while 循环以仅扫描需要插入 A[i] 的位置。请注意,如果 A[i] 大于所有排序列表,则内部循环不会迭代,j == i 和 A[i] 不需要移动(因此只需继续外部循环)。
相关文章:
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- 合并两个排序链表时运行时出错
- 在 C++ 中合并两个排序链表
- 使用unique_ptr插入单个链表的位置
- 在排序链表中插入结构并将其写入二进制文件
- 在给定节点之后插入双向链表中的节点
- C++:按数字排序链表错误
- 家庭作业的排序链表程序中的分段错误
- 已排序插入到链表中
- 删除已排序链表中的值
- 排序链表-移动节点还是交换数据成员
- 无法插入有序链表
- 单排序链表-无限循环
- 插入排序链表c++
- 如何将文件中的数字插入到链表中
- 冒泡排序链表C++
- 正在从文件中读取中的数据并插入到链表C++中
- 插入到链表的尾部,C++无法正常工作
- C++ 中的排序链表不会插入
- 插入排序链表c++