【10分】A. 实验7-1-1 简化的插入排序 题目描述 本题要求编写程序,将一个给定的整数插到原本有序的整数序列中,使结果序列仍然有序。 输入 输入在第一行先给出非负整数N(<=10);第二行给出N个从小到大排好顺序的整数;第三行给出一个整数X。 输出 在一行内输出将X插入后仍然从小到大有序的整数序列,每个数字后面有一个空格。
时间: 2023-07-16 21:15:26 浏览: 193
```python
n = int(input())
lst = list(map(int, input().split()))
x = int(input())
for i in range(n):
if lst[i] > x:
lst.insert(i, x)
break
else:
lst.append(x)
print(*lst)
```
思路解析:
首先读入序列长度和有序序列,以及要插入的数字。
遍历有序序列,找到第一个比插入数字大的位置,将插入数字插入该位置。如果有序序列中所有数字都比插入数字小,则在序列末尾添加插入数字。
最后输出插入数字后的有序序列。
相关问题
用C语言写实验7-1-1 简化的插入排序 题目描述 本题要求编写程序,将一个给定的整数插到原本有序的整数序列中,使结果序列仍然有序。 输入 输入在第一行先给出非负整数N(<=10);第二行给出N个从小到大排好顺序的整数;第三行给出一个整数X。 输出 在一行内输出将X插入后仍然从小到大有序的整数序列,每个数字后面有一个空格。
```c
#include <stdio.h>
int main()
{
int n, a[11], x, i, j;
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
scanf("%d", &x);
for(i = 0; i < n; i++)
{
if(x <= a[i])
{
for(j = n-1; j >= i; j--)
a[j+1] = a[j];
a[i] = x;
break;
}
}
if(i == n)
a[i] = x;
for(i = 0; i < n+1; i++)
printf("%d ", a[i]);
return 0;
}
```
试题描述 输入无序的元素,分别建立两个有3个结点的逆序单链表(有头结点)(显示排序后的链表),合并两个单链表使之仍然有序,显示合并后的单链表。 样例输入 4 6 8 5 7 9 样例输出 8 6 4 9 7 5 9 8 7 6 5 4 C语言
题目要求你编写一个C语言程序,给定一组无序整数作为输入,首先将它们分别插入到两个已有的逆序排列的单链表中(每个链表都有三个节点)。然后,你需要合并这两个链表,并保持合并后的链表有序。最后,你需要展示出合并后的链表。
步骤可以分为三部分:
1. **创建逆序链表**:对于样例输入,初始逆序链表可能是这样的:`5->7->9` 和 `4->6->8`。
2. **插入新元素**:遍历两个链表,每次将输入的数字插入到当前元素之后,使得链表保持逆序。
3. **合并链表**:从头开始比较两个链表的节点值,较小的节点添加到结果链表,然后移动指向下一个较小节点。
下面是一个简化的伪代码示例:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
// 函数:合并并排序链表
Node* mergeAndSort(Node* list1, Node* list2) {
// 创建一个新的空链表来存储结果
Node* result = NULL;
Node* current = NULL;
while (list1 != NULL && list2 != NULL) {
if (list1->data <= list2->data) {
// 如果list1的数据更小,将其加入结果链表
if (result == NULL) {
result = list1;
current = result;
} else {
current->next = list1;
current = current->next;
}
list1 = list1->next;
} else {
// 否则,list2的数据更小
if (result == NULL) {
result = list2;
current = result;
} else {
current->next = list2;
current = current->next;
}
list2 = list2->next;
}
}
// 将剩余的部分添加到结果链表
if (list1 != NULL) {
current->next = list1;
} else {
current->next = list2;
}
return result;
}
int main() {
// 输入处理,创建逆序链表和实际操作...
// 示例:
Node* list1_head = createReversedList(5, 7, 9);
Node* list2_head = createReversedList(4, 6, 8);
Node* mergedHead = mergeAndSort(list1_head, list2_head);
// 打印合并后的链表
printLinkedList(mergedHead);
return 0;
}
```
阅读全文