首页 > 试题广场 >

有序序列插入一个数

[编程题]有序序列插入一个数
  • 热度指数:11124 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解


有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。




输入描述:
共三行,
第一行输入一个整数(0≤N≤50)。
第二行输入N个升序排列的整数,输入用空格分隔的N个整数。
第三行输入想要进行插入的一个整数。


输出描述:
输出为一行,N+1个有序排列的整数。
示例1

输入

7 
5 30 40 50 60 70 90
20

输出

5 20 30 40 50 60 70 90
int main() {
    int n, m;
    scanf("%d", &n);
    int arr[n];
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }
    scanf("%d", &m);

    int pos = 0;
    for (int i = 0; i < n; i++) {
        if (arr[i] < m && arr[i + 1] > m) {
            pos = i + 1;
            break;
        }
    }

    int end = n;
    while (pos <= end) {
        arr[end] = arr[end-1];
        end--;
    }
    arr[pos] = m;

    for (int i = 0; i <= n; i++) {
        printf("%d ", arr[i]);
    }

    return 0;
}

发表于 2024-08-09 11:59:23 回复(0)
#include<stdio.h>
int main() {
    int n = 0;
    int arr[50] = {0};
    int m = 0;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        scanf("%d", &arr[i]);
    }
    scanf("%d", &arr[0]);
    for (int j = 0; j < n; j++) {
        if (arr[j] > arr[j + 1]) {
            int tmp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = tmp;
        } else
            break;
    }
    for (int i = 0; i <= n; i++) {
        printf("%d ", arr[i]);
    }

    return 0;
}

发表于 2024-02-04 18:51:15 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int n = 0;
    int arr[100] = { 0 };
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    int a = 0;
    scanf("%d", &a);
    if (a < arr[0])
    {
        printf("%d ", a);
    }
    for (int i = 0; i < n; i++)
    {
        
        printf("%d ", arr[i]);
        if (a > arr[i] && a < arr[i + 1])
        {
            printf("%d ", a);
        }
    }
    if (a > arr[n - 1])
    {
        printf("%d ", a);
    }
    return 0;
}
编辑于 2024-01-25 19:30:27 回复(1)
//解题思路:冒泡排序插入一个数字 即可
#include <stdio.h>
int main()
{
    int arr[51] = { 0 };
    int n = 0;
    scanf("%d", &n);
    //输入n个数
    int i = 0;
    for (i = 0; i < n; i++)
    {
        scanf("%d ", &arr[i]);
    }
    //插入数据
    int m = 0;
    int j = 0;
    scanf("%d", &m);
    arr[n] = m;
    int tmp = 0;
    for (i = 0; i <n; i++)
    {
        for (j = 0; j <n-i; j++)
        {
            if (arr[j] >= arr[j + 1])
            {
                tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }
        }
    }
    //输出插入后的序列
    for (i = 0; i <= n; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}


发表于 2023-05-24 22:48:49 回复(0)
#include <stdio.h>

int main() {
    int n = 0, i = 0;
    scanf("%d", &n);
    int arr[n + 1];
    for (i = 0; i <= n; i++) {
        scanf("%d", &arr[i]);
    }
    int temp = arr[n];
    for (i = n - 1; arr[i] > temp; i--) {
        arr[i + 1] = arr[i];
    }
    arr[i + 1] = temp;
    for (i = 0; i < n + 1; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

发表于 2023-03-19 17:38:51 回复(0)
#include <stdio.h>

int main() {
    /*
    有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,
    序列仍然是升序。
    */
    int n, k, i, j;
    int arr[50];
    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }
    scanf("%d", &k);
    for (i = -1; i < n - 1; i++) {
        if (k <= arr[n - 1]) { // 判断插入的数是否比数组中最大的数小
            // 如果是就要将比插入数大的数全都向后移一位
            if (k <= arr[i + 1]) {
                for (j = n; j >= (i + 2); j--) {
                    arr[j] = arr[j - 1];
                }
                arr[i + 1] = k; // 将插入数放在它该在的位置
                break;
            }
        } else { // 如果不是就直接将插入数放在最后
            arr[n] = k;
        }

    }
    for (i = 0; i < n + 1; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

发表于 2022-12-23 10:32:30 回复(0)
#include <stdio.h>
int main()
{
    int N = 0;
    int arr[50] = {0};
    int num = 0;
    int i = 0;
    scanf("%d", &N);
    for (i = 0; i < N; i++)
        scanf("%d", &arr[i]);
    scanf("%d", &num);
    int flag = 0;
    for (i = 0; i < N; i++)
    {
        if (num <= arr[i] && flag == 0)
        {
            printf("%d ", num);
            flag = 1;
        }
        printf("%d ", arr[i]);
    }
    if (flag == 0)
        printf("%d ", num);
    printf("\n");
    return 0;
}

发表于 2022-05-12 13:49:23 回复(0)
#include<stdio.h>
int main()
{
    int i,a,arr[50]={0},b;
    scanf("%d",&a);
    for(i=0;i<a;i++)
    {
        scanf("%d",&arr[i]);
    }
    scanf("%d",&b);
    arr[a]=arr[a-1];
    for(i=a-1;;i--)
    {
        if(arr[i]>b)
            arr[i]=arr[i-1];
        else
        {
            arr[i+1]=b;
            break;
        }
    }
    for(i=0;i<a+1;i++)
        printf("%d ",arr[i]);
    return 0;
}

发表于 2022-02-28 19:18:16 回复(0)
int main(){
    int n;
    int arr[50] = {0};
    scanf("%d", &n);
    for(int i = 0; i < n; i++){
        scanf("%d ", &arr[i]);
    }
    int m;
    scanf("%d", &m);
    int j = 0;
    for(j = n - 1; j >= 0; j--){
       if(arr[j] > m){
           arr[j + 1] = arr[j];
       } 
       else{
           arr[j + 1] = m;
           break;
       }
   }
    if(j < 0)
        arr[0] = m;
    for(int i = 0; i < n + 1; i++){
        printf("%d ", arr[i]);
    }
    return 0;
}

发表于 2021-11-26 11:14:59 回复(0)
int main()
{
    int n=0;
    int i=0;
    int arr[51]={0};
    scanf("%d",&n);
 
    for(i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
    int a=0;
    scanf("%d",&a);
    for(i=n-1;i>=0;i--)
    {
        if(arr[i]>a)
        {
            arr[i+1]=arr[i];
            arr[i]=a;
        }
        else{
            break;
        }
    }
    arr[i+1]=a;
    for(i=0;i<n+1;i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}
发表于 2021-11-14 19:13:18 回复(0)
int main()
{
    int n=0;
    int i=0;
    int k=0;
    int arr[51]={0};
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
    scanf("%d",&k);
    for(i=0;i<n;i++)
    {
        if(arr[i]>k)
        {
            int j=0;
            for(j=n-1;j>i-1;j--)
            {
                arr[j+1]=arr[j];
            }
            arr[i]=k;
            n++;
            break;
        }
        if(k>arr[n-1])
        {
            arr[n]=k;
            n++;
            break;
        }
    }
    for(i=0;i<n;i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}
发表于 2021-10-08 16:56:31 回复(0)