题解 | #有序序列插入一个数#
有序序列插入一个数
https://www.nowcoder.com/practice/74486aec6fe14d44b509efabf265ee66
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
while (scanf("%d", &n) != EOF) { // 注意 while 处理多个 case
int* p = malloc(sizeof(int) * (n + 1));
if (p == NULL)
{
perror("main");
return 1;
}
int i;
//输入数据
for (i = 0; i < n; i++)
{
scanf("%d", &p[i]);
}
int ret;
scanf("\n%d", &ret);
int tmp = ret;
//操作,外循环用来比较
for (i = 0; i < n; i++)
{
//若插入的输小于某个数,那么将这个数插在前面,即将当前位置依次往后移动一个
if (ret < p[i])
{
tmp = p[i]; //暂存p[i]
p[i] = ret; //交换
ret = tmp; //用当时的p[i]去跟后面的比较,虽然都能通过
}
}
//将取出的ret与原来数组中的最后一位进行比较,肯定是会大于,然后将这个数放到数组的末尾
if (ret > p[n - 1])
{
p[n] = ret;
}
for (i = 0; i <= n; i++)
{
printf("%d ", p[i]);
}
free(p);
p = NULL;
}
return 0;
}
