在一个升序排列的数组中插入一个数 (10 分)
编写函数fun,在一个已按升序排列的数组中插入一个数,插入后,数组元素仍按升序排列。
函数接口定义:
void fun(int a[N],int number);
其中?a ?和?number ?都是用户传入的参数。函数在一个已按升序排列的数组?a ?中插入一个数?number ?,插入后,数组元素仍按升序排列。
裁判测试程序样例:
#include <stdio.h> #define N 11 void fun(int a[N],int number); int main() { ?int i,number,a[N]={1,2,4,6,8,9,12,15,149,156}; ?scanf("%d",&number); ?printf("The original array:\n"); ?for(i=0;i<N-1;i++) ? ? printf("%5d",a[i]); ?printf("\n"); ?fun(a,number); ? ? printf("The result array:\n"); ? for(i=0;i<N;i++) ? ? ?printf("%5d",a[i]); ?printf("\n"); ?return 0; ?}
/* 请在这里填写答案 */
输入样例:
6
输出样例:
The original array: ? ? 1 ? ?2 ? ?4 ? ?6 ? ?8 ? ?9 ? 12 ? 15 ?149 ?156 The result array: ? ? 1 ? ?2 ? ?4 ? ?6 ? ?6 ? ?8 ? ?9 ? 12 ? 15 ?149 ?156
这个题我们可以通过遍历先找出第一个比插入的数大的数的下标,然后从下标开始的数都向后移动一位,从最后一个数开始,到下标的数结束,再把插入的数字作为这个下标的数。
void fun(int a[N],int number){
int i,j;
for( i=0;i<N;i++){
if(number<=a[i]){
break;
}
}
for(j=N-2;j>=i;j--){
a[j+1]=a[j];
}
a[i]=number;
}
|