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 国际」许可协议进行许可。

posted @   EEvinci  阅读(264)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示