首页 > 试题广场 >

有序序列插入一个整数

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

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

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

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


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

输入

5
1 6 9 22 30
8

输出

1 6 8 9 22 30
#include<iostream>
using namespace std;

int main()
{
    int n,insert;
    cin>>n;
    int a[n+1];
    for(int i=0;i<n;i++)
        cin>>a[i];
    cin>>insert;
    for(int i=0;i<n;i++)
    {
        if(insert<a[i])//定位插入位置
        {
            for(int j=n+1;j>i;j--)//后面全都往后窜一位
            {
                a[j]=a[j-1];
            }
            a[i]=insert;
            break;
        }
        a[n]=insert;//要插入的值比所有原数组中所元素都大,放在末尾
    }
    for(int i=0;i<n+1;i++)
        cout<<a[i]<<" ";
    return 0;
}



发表于 2020-07-24 17:11:00 回复(0)
#include<stdio.h>
int main()
{
    int N , a[50] , b[50];
    scanf("%d",&N);
    for(int i = 0 ; i < N ; i++) scanf("%d",&a[i]);
    scanf("%d",&a[N]); //printf("%d",a[N]);
    for(int i = 0 ; i < N ; i++)
    {
        if(a[N] > a[N-1])    //a[N]放在最后
        {
            for(int j = 0 ; j < N ; j++) b[j] = a[j];
            b[N] = a[N];
            break;
        }    
        else if(a[N] < a[0])    //a[N]放在最前
        {
            b[0] = a[N];
            for(int j = 0 ; j < N ; j++) b[j+1] = a[j];
            break;
        }    
        else if(a[N] > a[i] && a[N] < a[i+1])    //a[N]放在中间
        {
            for(int j = 0 ; j <= i ; j++) b[j] = a[j];
            b[i+1] = a[N];
            for(int k = i + 1 ; k < N ; k++) b[k+1] = a[k];
            break;
        }    
    }
    for(int c = 0 ; c <=  N ; c++) printf("%d ",b[c]);
    return 0;
}

发表于 2022-06-26 12:05:12 回复(0)
#include <stdio.h>
int main()
{
    int a[55],n,i,x;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    scanf("%d",&x);
    for(i=n;i>0;i--){
        if(a[i-1]>=x){
            a[i]=a[i-1];
        }else{
            a[i]=x;
            break;
        }
    }
    if(i==0) a[i]=x;
    for(i=0;i<=n;i++){
        if(i==n) printf("%d\n",a[i]);
        else printf("%d ",a[i]);
    }
}

发表于 2020-04-10 18:02:14 回复(0)
#include <iostream>
#include <set>
using namespace std;

int main()
{
    int n, x, y;
    cin >> n;
    multiset<int> hh;
    for (int i = 0; i < n; i ++ ) cin >> x, hh.insert(x);
    cin >> y, hh.insert(y);
    for (auto x : hh) cout << x << ' ';
    
}

发表于 2022-02-26 14:42:03 回复(0)
#include<stdio.h>
int main(void)
{
    int i,n,num[100];
    int t,count=1;
    scanf("%d",&n);//输入元素个数
    for(i=0;i<n;i++)//输入元素的值
    {
        scanf("%d",&num[i]);
    }
    scanf("%d",&t);//输入待插入元素
    for(i=0;i<n;i++)//插在序列最前面或中间部分
    {
        if(num[i]>t&&count==1)
        {
            printf("%d ",t);
            count=0;
        }
        printf("%d ",num[i]);
    }
    if(count==1) printf("%d ",t);//插在最后
    return 0;
}

发表于 2022-01-31 13:37:00 回复(2)
#include <stdio.h>
#include <stdlib.h>

int main() 
{
    int n = 0;
    scanf("%d", &n);
    //申请n+1个空间大小的数组
    int* a = (int*)malloc(sizeof(int) * (n + 1));

    for(int i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }
    //插入的数
    int m;
    scanf("%d", &m);
    int i = 0;
    //找出要在那个位置插入
    for(i = 0; i < n + 1; i++)
    {
        if(m <= a[i])
            break;
    }
    //把这个位置之后的数据往后移一格,n是数组最后一个元素的下标
    int j =0;
    for(j = n; j > i; j--)
    {
        a[j] = a[j - 1];
    }
    //插入m到数组,跳出循环是j == i
    a[j] = m;

    //打印数组
    for(i = 0; i < n + 1; i++)
    {
        printf("%d ", a[i]);
    }

    return 0;
}


发表于 2024-06-23 03:38:27 回复(1)
#include<stdio.h>
int main() {
int N, i, arr[100];
scanf("%d", &N);
for (i = 0; i < N; i++) {
scanf("%d", &arr[i]);
}
int n;
scanf("%d", &n);
for (i = 0; i < N; i++) {
if(n<arr[i]){ //找到插入位置
for(int j=N;j>i;j--){
arr[j]=arr[j-1]; //通过内层循环,从数组末尾开始将元素依次后移
}
arr[i]=n;//将n插入合适位置
break;//跳出循环
}
}
if(i==N){//在前面的循环中,变量 i 从 0 开始遍历到 N - 1(假设数组长度为 N)。如果循环结束后 i 的值等于 N,说明在整个循环过程中都没有找到新数 n 的合适插入位置。
arr[N]=n;
}
for (i = 0; i <= N; i++) {
printf("%d ", arr[i]);
}
return 0;
}
发表于 2024-10-20 13:32:31 回复(0)
#include <stdio.h>

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

发表于 2022-08-20 20:26:46 回复(0)
N = int(input())
num = list(map(int,input().split()))
new_num = int(input())
for i in range(0,len(num)):
    if new_num > num[-1]:
        num.append(new_num)
        break
    elif new_num < num[i]:
        num.insert(i,new_num)
        break
for i in num:
    print(i,end = ' ')

发表于 2020-09-16 19:13:49 回复(0)
N = int(input())
list_N = list(map(int, input().split()))
number = int(input())
list_N.append(number)
list_N.sort()
print(" ".join(map(str, list_N)))

发表于 2026-03-25 19:16:41 回复(0)
#include <stdio.h>

int main() 
{
    int n, i, j, new1;
    scanf("%d", &n);
    int a[n+1];    //+1是留个空位放新数
    for (i=0; i<n; i++)  //输入n个数
        scanf("%d", &a[i]);  
    scanf("%d", &new1);  //输入新数

    for (i=0; i<n-1; i++)  //将n个数从小到大排序
    {
        for (j=i+1; j<n; j++)
        {
            if (a[i] > a[j])
            {
                int t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
    }
    for (i=0; i<n; i++)   //插入新数并按从小到大排序
    {
        if (new1 >= a[n-1])   //如果新数比全部数大,就放在最后一个
        {
            a[n] = new1;
            break;
        }
        else if (new1 <= a[i])  //如果新数小于等于a[i],就把a[i]后面的数逐一后移,再把新数放在a[i]的位置
        {
            for (j=n; j>=i+1; j--)
            {
                a[j] = a[j-1];
            }
            a[i] = new1;
            break;
        }
    }
    for (i=0; i<=n; i++)  //输出插入新数并按升序排好的数组
        printf("%d ", a[i]);
    
    return 0;
}

发表于 2026-01-19 22:55:29 回复(0)
#include <stdio.h>

int main() {
    int n,x;
    scanf("%d",&n);
    int a[n + 1];
    for(int i = 0;i < n;i++) scanf("%d",&a[i]);
    scanf("%d",&x);
   
    for(int i = n - 1;i >= 0;i--){
        int index = i;
        if(a[index] > x){
            a[index + 1] = a[index];
            a[index] = x;
        }
        else{
            a[index + 1] = x;
            break;
        }
    }
   
    for(int i =0;i < n + 1;i++) printf("%d ",a[i]);
    return 0;
}
发表于 2025-11-30 15:40:22 回复(0)
n=int(input())
l=list(map(int,input().split()))
x=int(input())
l.append(x)
l.sort()
for i in range(n+1):
    print(l[i],end=" ")

发表于 2025-11-24 22:31:09 回复(0)
#include <stdio.h>

int main() 
{
    int n=0;
    int a=0;
    scanf("%d",&n);
    int arr[50]={0};
    for(int i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
    scanf("%d",&a);
    int cnt=0;
    for(int j=0;j<n;j++)
    {
        if(arr[j]>=a)
        {
            for(int k=n;k>j;k--)
            {
                arr[k]=arr[k-1];
            }
            arr[j]=a;
            break;
        }
        cnt++;
    }
    if(cnt==n)
    {
        arr[n]=a;
    }
    for(int i=0;i<=n;i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}

发表于 2025-11-08 21:16:40 回复(0)
#include <iostream>
using namespace std;

int main() {
    int n;
    int isrt;
    cin>>n;
    int a[n+1];
    int temp;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    cin>>a[n];
    for(int i=0;i<n;++i){
        for(int j=0;j<n-i;++j){
            if(a[j]>a[j+1]){
                temp=a[j+1];
                a[j+1]=a[j];
                a[j]=temp;
            }
        }
    }
    for(int i=0;i<n+1;i++)cout<<a[i]<<' ';
}
// 64 位输出请用 printf("%lld")

发表于 2025-10-26 22:25:27 回复(0)
#include <stdio.h>

int main() {
    int a, b[100]={};
    scanf("%d\n",&a);
    int c;
    for(c=0;c<a;c++){
        scanf("%d ",&b[c]);
    }
   // printf("\n");
    int d;
    scanf("%d",&d);
    int e,w,k;
    for(e=a-1;e>=0;e--){
        if(d>b[a-1]){
            b[a]=d;
            break;
        }
        b[e+1]=b[e];
        if(d>b[e]){
            b[e+1]=d;
            break;
        }
       
    }
    if(d<=b[1]){
        b[0]=d;
    }

    int i;
    for(i=0;i<=a;i++){
        printf("%d ",b[i]);
    }
    return 0;
}
发表于 2025-08-08 17:30:59 回复(0)
#include <stdio.h>
#include <stdlib.h>
int main() {
    int N;
    scanf("%d",&N);
    int *sz=(int *)malloc((N+1)*sizeof(int));
    for(int i=0;i<N;i++)
    {
        scanf("%d",&sz[i]);
    }
    int x;
    scanf("%d",&x);
    sz[N]=x;
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N-i;j++)
        {
            if(sz[j]>sz[j+1])
            {
                int t=sz[j];
                sz[j]=sz[j+1];
                sz[j+1]=t;
            }
        }
    }
    for(int i=0;i<N+1;i++)
    printf("%d ",sz[i]);
    free(sz);
    return 0;
}
发表于 2025-07-11 14:11:54 回复(0)
#include <stdio.h>

int main() {

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

	int m = 0;
	scanf("%d", &m);
	int i = 0;
	for (i = n - 1;i >= 0;i--)
	{
		if (m >= arr[i])
		{
			arr[i + 1] = m;
			break;
		}

		else {
			arr[i + 1] = arr[i];
		}

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

	return 0;
}

发表于 2025-06-19 20:25:41 回复(0)
#include <iostream>
using namespace std;
int a[51];
int main() {
    int n,k;
    cin >> n;
    for (int i=0; i<n; i++) {
       cin >> a[i];
    }
    cin >> k;
    int pos =n;
    for (int i=0; i<n; i++) {
       if(k<a[i]){
        pos = i;
        break;
       }
    }
    for (int i=n; i>pos; i--) {
       a[i] = a[i-1];
    }
    a[pos] = k;
    for (int i=0; i<n+1; i++) {
       cout << a[i] << " ";
    }
    return 0;
}
发表于 2025-03-12 16:56:31 回复(0)
#include<stdio.h>
void My_scanf(int arr[],int n)
{
   int i = 0;
   for(i=0;i<n-1;i++)
   {
    scanf("%d",&arr[i]);
   }
}

void insert(int arr[],int n)
{
   int i = 0;
   int j = 0;
   for(i=0;i<n-1;i++)
   {
      for(j=i+1;j<n;j++)
      {
        if(arr[i]>=arr[j])
       {
         int temp = 0;
         temp = arr[i];
         arr[i]=arr[j];
         arr[j] = temp;
       }
      }
   }

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

int main()
{
    int n = 0;
    int k = 0;
    scanf("%d\n",&n);
    n = n + 1;
    int arr[n];
    My_scanf(arr,n);
    scanf("%d",&k);
    arr[n-1]=k;
    insert(arr,n);
    My_printf(arr,n);
    return 0;
}

发表于 2024-12-30 09:32:59 回复(0)