首页 > 试题广场 >

有序序列插入一个数

[编程题]有序序列插入一个数
  • 热度指数:264 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。

输入描述:

第一行输入一个整数(0≤N≤50)。

第二行输入N个升序排列的整数,输入用空格分隔的N个整数。

第三行输入想要进行插入的一个整数。



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

输入

5
1 6 9 22 30
8

输出

1 6 8 9 22 30
#include<stdio.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    int i = 0;
    int arr[100] = { 0 };
    for (i = 0; i < n; i++)
    {
        scanf("%d ", &arr[i]);
    }
    int x = 0; int tmp = 0; int j = 0;
    scanf("%d", &x);
    for (i = 0; i < n; i++)
    {
        if (x < arr[i])
        {
            for (j = n;j>i; j--)
            {
                arr[j]=arr[j-1];
            }
            arr[j] = x;
            break;
            
        }
        
    }
    if (x > arr[n - 1])
    {
        arr[n] = x;
    }
    for (i = 0; i <= n; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}
发表于 2023-03-10 20:10:19 回复(0)
#include <stdio.h>

int main()
{
    int n = 0;
    scanf("%d",&n);
    int arr[51] = {0};
    int i = 0;
    for(i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    
    int m = 0;
    scanf("%d", &m);
    
    for(i = n-1; i>=0; i--)
    {
        if(arr[i]>m)
        {
            arr[i+1] = arr[i];
        }
        else
        {
            arr[i+1] = m;
            break;
        }
    }
    //插入数据小于所有数据时
    if(i<0)
    {
        arr[0] = m;
    }
    
    int s = 0;
    for(s = 0; s < n+1; s++)
    {
        printf("%d ",arr[s]);
    }
    
    return 0;
}
发表于 2022-09-07 16:52:40 回复(0)
#include<stdio.h>
int main()
{
    int n=0;//个数
    int arr[51]={0}; //保证可以放0-50
    int m=0; //插入的数字
    scanf("%d",&n);//输入个数
    int i=0;
    for(i=0;i<n;i++)//输入有序的数字
    {
        scanf("%d",&arr[i]);
    }
    //输入要插入的数字
    scanf("%d",&m);
    //插入数据的实现
    for(i=n-1;i>=0;i--)
    {
        if(arr[i]>m)
        {
            arr[i+1]=arr[i];
        }
        else
        {
            arr[i+1]=m;
            break;
        }
            
    }
    //情况2,当m比所有的数都小,在第一个,d对应的数组i下标是-1
    if(i<0)
    {
        arr[0]=m;
    }
    //输出
    for(i=0;i<n+1;i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}
发表于 2022-09-04 15:53:00 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int a = 0, b = 0, c = 0,d=0, number = 0;
	int arr[51] = { 0 };
	scanf("%d",&a);
	for (b = 1; b < a+1; b++)
	{
		scanf("%d", &arr[b]);
	}
	scanf("%d", &number);
	arr[0] = number;
	while ((arr[c] > arr[c + 1])&&c<a)
	{
		int tem = arr[c + 1];
		arr[c + 1] = arr[c];
		arr[c] = tem;
		c++;
	}
	for (d = 0; d < a+1; d++)
		printf("%d ", arr[d]);
	return 0;
}

编辑于 2022-08-05 19:15:00 回复(0)
var number = parseInt(readline());
var numList = readline().split(' ');
var newNum = parseInt(readline());
 
var a = -1;
var b = number;
var mid;
 
while(b - a > 1){
    mid = parseInt((b + a)/ 2);
    if(newNum >= numList[mid]){
        a = mid;
    }else{
        b = mid;
    }
}
numList.splice(a+1, 0, newNum);
print(numList.join(' '));

发表于 2019-09-10 23:56:10 回复(0)

问题信息

上传者:小小
难度:
5条回答 1569浏览

热门推荐

通过挑战的用户