首页 > 试题广场 >

有序序列插入一个整数

[编程题]有序序列插入一个整数
  • 热度指数:30284 时间限制: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)
#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)
#include<stdio.h>
int main()
{
    int n = 0;
    scanf("%d", &n);

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

    int k = 0;
    scanf("%d", &k);    //输入要插入的数字
    arr[n] = k;         //将其放在末尾

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

    return 0;
}

发表于 2024-12-06 21:39:34 回复(0)
#include <stdio.h>

int main() {
    int N = 0, tem = 0;
    scanf("%d", &N);
    int arr[N + 1];
    for (int i = 0; i < N; i++) {
        scanf("%d", &arr[i]);
    }
    int a = 0;
    scanf("%d", &a);
    arr[N] = a;
    for (int j = 0; j < N; j++) {
        for (int u = 0; u < N - j; u++) {
            if (arr[u] > arr[u + 1]) {
                tem = arr[u];
                arr[u] = arr[u + 1];
                arr[u + 1] = tem;
            }
        }
    }
    for (int i = 0; i <= N; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}
发表于 2024-12-03 20:12:48 回复(0)
#include <stdio.h>
int main(){
    int n=0;
    int temp=0;
    scanf("%d", &n);
    int arr[n+1];
    for(int i=0;i<n;i++){
        scanf("%d", &arr[i]);
    }
    int x=0;
    scanf("%d", &x);
    arr[n]=x;
    for(int q=0;q<n;q++){
       for(int e=n-q-1;e>=0;e--){
         if(arr[q]>arr[n-e]){
            temp=arr[q];
            arr[q]=arr[n-e];
            arr[n-e]=temp;
        }
       }
    }
    for(int w=0;w<n+1;w++){
        printf("%d ", arr[w]);
    }
    return 0;
}
发表于 2024-12-01 17:22:11 回复(0)
#include <stdio.h>

int main() {
    int i,size=0;
    scanf("%d",&size);
    int arr[100];
    for (int m=0;m<size;m++){
        scanf("%d",&arr[m]);
    }
    int ins=0;
    scanf("%d",&ins);
    for (i=0;i<=size;i++){
        if (arr[i]>ins){
            for (int j=size;j>=i+1;j--){
                arr[j]=arr[j-1];

            }
            arr[i]=ins;
            
            break;
        }
        if (i==size){
            arr[size]=ins;
        }
        }
    
  
    for (int k=0;k<=size;k++){
        printf("%d ",arr[k]);
    }
    
    return 0;
}

发表于 2024-11-07 12:23:33 回复(0)
#include <stdio.h>

int main() {
    int N;
    scanf("%d",&N);
    int array[N+1];
    int i;
    for(i=0;i<N;i++)
    {
        scanf("%d",&array[i]);
    }
    int n,j,temp=0;
    scanf("%d",&n);
    for(i=0;i<N;i++)             //遍历数组
    {
        if(array[i]>=n)         //找到第一个比插入数据大的数组元素
        {
        for (j = N; j > i; j--) //从数组末尾依次将数据后移
        {
           array[j]=array[j - 1];
        }
            array[i]=n;
            break;
        }
    }
      // 如果n比所有元素都大,插入到末尾
    if (i == N)
    {
        array[N]=n;
    }
    for (i = 0; i < N + 1; i++) {
        printf("%d ", array[i]);
    }
    return 0;
}

发表于 2024-09-30 10:24:31 回复(0)
n = int(input())
arr = list(map(int, input().split()))
m = int(input())

for i in range(len(arr)):
    if arr[i] > m:
        arr.insert(i,m)
        break
    if i ==len(arr)-1:
        arr.append(m)
print(*arr)

发表于 2024-09-27 23:20:12 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int n = in.nextInt();
        int[] nums = new int[n + 1];
        for (int i = 0; i < n; i++) {
            nums[i] = in.nextInt();
        }
        int num = in.nextInt();
        nums[n] = num; //把插入数字加到最后
        sort_nums(nums); //然后冒泡排序

        for (int i = 0; i <= n; i++) {
            System.out.print(nums[i] + " ");
        }
    }

    public static void sort_nums(int[] nums) {
        for (int i = 0; i < nums.length - 1; i++) {
            for (int j = 0; j < nums.length - 1; j++) {
                if (nums[j] > nums[j + 1]) {
                    int tmp = nums[j];
                    nums[j] = nums[j + 1];
                    nums[j + 1] = tmp;
                }
            }
        }
    }
}

发表于 2024-08-29 12:22:44 回复(0)

问题信息

上传者:牛客309119号
难度:
127条回答 2720浏览

热门推荐

通过挑战的用户

查看代码
有序序列插入一个整数