目录
BC77 有序序列插入一个数
描述
有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。
输入描述:
第一行输入一个整数(0≤N≤50)。
第二行输入N个升序排列的整数,输入用空格分隔的N个整数。
第三行输入想要进行插入的一个整数。
输出描述:
输出为一行,N+1个有序排列的整数。
input:
5
1 6 9 22 30
8
output:
1 6 8 9 22 30
#include <stdio.h> int main() { int arr[51]={0}; int m=0; scanf("%d",&m); for(int i=0;i<m;i++) scanf("%d",&arr[i]); //完成数组元素的输入 int ins=0; scanf("%d",&ins); for(int j=m-1;j>=0;j--)//从后往前设置,可以起到不断插入的作用 { if(arr[j]>ins) { arr[j+1]=arr[j];//占用后面的空间,腾出前面的位置插入 arr[j]=ins; } else { arr[j+1]=ins; break; } } for(int t=0;t<m+1;t++)//数组元素的输出 printf("%d ",arr[t]); return 0; }
此题要求的是进行一个有序数组的插入,那么思路大致为:既然是有序数组,那么要找到插入的位置对应的下标是多少,而在插入的时候如果从前往后遍历会导致没有多余的空间供新元素的插入,而如果选择从后向前遍历,可以使得后面的元素向后移位,腾出空间供新元素的插入,利用for循环把元素向前推进。
值得学习的点在于,利用数组后面空间不被占用,可以把元素后置再把新元素插入,反复重复就可以把要插入的新元素插入到想要的位置。