1118: 数列有序
题目描述:一个非递减有序的整型数组有n个元素,给定一个整数num,将num插入该序列的适当位置,使序列仍保持非递减有序。
要求定义一个函数insert(),将整数num插入在数组a的适当位置上,函数原型如下:
int insert(int a[], int n, int num);
另外函数仍然调用以前定义过的函数PrintArr()输出数组所有元素。
输入:输入有三行。第一行是一个正整数n,n<=1000。第二行是n个整数,第三行是待插入整数num。
输出:输出非递减有序的n+1个整数,数据之间用空格隔开。输出占一行。
样例输入
5
1 2 4 5 6
3
样例输出
1 2 3 4 5 6
提示:元素之间有空格,最后一个元素后面没有空格。
思路:根据输入的n创建动态数组,为动态数组赋值,输入要插入的元素num,调用insert函数找到插入位置num,插入insert,调用PrintArr函数输出数组元素。
1.没有结果的做法
代码如下
#include <stdio.h>
#include <stdlib.h>
int insert(int a[], int n, int num){
int i=0,j=n;
while(i<n&&a[i]<num) i++;//查找插入位置,从0位到第n位,插入位置之前元素都小于num;
while(j>=i) {//从后往前移,直到移完第i位;
a[j+1]=a[j];
j--;
}
a[i]=num;//插入元素;
}
int PrintArr(int a[],int n){
for(int i=0;i<n;i++){
printf(" %d",a[i]);//逐个输出元素;
}
}
int main(){
int *a,n,i,num;
scanf("%d",&n);
a=(int *)calloc(n+1,sizeof(int));//为a申请数组空间,为方便插入多申请一个整型空间 ;
for(i=0;i<n;i++){//为数组赋值;
scanf("%d",a+i);
}
scanf("%d",&num);//输入要插入的整数;
insert(a,n,num);//调用插入函数;参数为数组首地址,数组中元素个数,要插入的元素;
PrintArr(a,n+1);//输出数组中n+1个元素
free(a);
}
运行结果:
2.可以得到结果的情况
代码如下
#include <stdio.h>
#include <stdlib.h>
int insert(int a[], int n, int num){
int i=0,j=n;
while(i<n&&a[i]<num) i++;//查找插入位置,从0位到第n位,插入位置之前元素都小于num;
while(j>=i) {//从后往前移,直到移完第i位;
a[j+1]=a[j];
j--;
}
a[i]=num;//插入元素;
}
int PrintArr(int a[],int n){
for(int i=0;i<n;i++){
printf(" %d",a[i]);//逐个输出元素;
}
}
int main(){
int *a,n,i,num;
scanf("%d",&n);
a=(int *)calloc(n+1,sizeof(int));//为a申请数组空间,为方便插入多申请一个整型空间 ;
for(i=0;i<n;i++){//为数组赋值;
scanf("%d",a+i);
}
for(int i=0;i<n;i++){
printf("%d ",a[i]);//逐个输出元素;
}
printf("\n");
scanf("%d",&num);//输入要插入的整数;
insert(a,n,num);//调用插入函数;参数为数组首地址,数组中元素个数,要插入的元素;
PrintArr(a,n+1);//输出数组中n+1个元素
free(a);
}
** 运行结果:**
我存在什么问题,是有什么地方没有掌握到位吗?