7-1-1 简化的插入排序 (15 分)
7-1-1 简化的插入排序 (15 分)
本题要求编写程序,将一个给定的整数插到原本有序的整数序列中,使结果序列仍然有序。
输入格式:#
输入在第一行先给出非负整数N(<10);第二行给出N个从小到大排好顺序的整数;第三行给出一个整数X。
输出格式:#
在一行内输出将X插入后仍然从小到大有序的整数序列,每个数字后面有一个空格。
输入样例:#
5
1 2 4 5 7
3
结尾无空行
输出样例:#
1 2 3 4 5 7
结尾无空行
代码:#
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[n];
for(int i = 0; i < n; i++)
{
scanf("%d",&a[i]);
}
int x;
scanf("%d",&x);
int temp;
for(int i = 0; i < n; i++)
{
if(x < a[i])
{
temp = a[i];
a[i] = x;
x = temp;
}
printf("%d ",a[i]);
}
printf("%d ",x);
}
这个方法是我看到的写的最好的一个方法,避开了传统的双重循环(插入一个元素, 如果不是末尾就要其他元素向后移动一位), 直接把时间复杂度从O(n^2)降到了O(n), 而且是一种动态的计算输出方法, 在构思上就高级了一个阶层
#include <stdio.h>
int main()
{
int n,i,j,b,temp;
int a[11];
scanf("%d",&n);
for(i = 0;i < n;i++)
scanf("%d",&a[i]);
scanf("%d",&b);
//开始吟唱
for(i = 0;i <= n;i++){
if(b <= a[i]){
for(j = n;j > i;j--){
a[j] = a[j-1];
}
a[i] = b;
break;
}
//这两个判断我觉得是有点鸡肋的判断,就是那种觉得对又觉得哪里有些奇怪,但在这个程序里面还需要
if(b == a[n-1])
a[n] = b;
if(b>a[n-1])
a[n] = b;
}
//终止吟唱
//输出元素
for(i = 0;i <= n;i++)
printf("%d ",a[i]);
return 0;
}
作者:Evinci
出处:https://www.cnblogs.com/evinci/p/17123985.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律