《C语言及程序设计》实践参考——有序数组中插入数据(函数版)

返回:贺老师课程教学链接  项目要求


【项目1-有序数组中插入数据(函数版)】
  有一个足够“大”的数组a,其中已经存储了n个呈升序排列的数据。调用函数insert(a, n, m),可以将数m插入到a中的合适位置,使其仍然保持升序,并且返回值为数组中有效数字的个数(即原先的n加1)。
  例如,若a中数据为1 7 8 17 23 24 59 62 101,n=9,需要插入的数字m为50,调用函数insert(a, n, m)后,a中数据为1 7 8 17 23 24 50 59 62 101,n=10。
  下面给出了调用函数insert的main函数,请写出insert函数来,实现上述功能。

int main()
{
    int a[N]= {1, 7, 8, 17, 23, 24, 59, 62, 101};
    int i, n=9;
    int m =50;
    n = insert(a, n, m);   //在长度为n的a数组中插入m,使仍保持有序
    for(i=0; i<n; ++i)
        printf("%d ", a[i]);
    printf("\n");
    return 0;
}
[参考解答]

#include <stdio.h>
#define N 100
int insert(int [], int, int);
int main()
{
    int a[N]= {1, 7, 8, 17, 23, 24, 59, 62, 101};
    int i, n=9;
    int m =50;
    n = insert(a, n, m);   //在长度为n的a数组中插入m,使仍保持有序
    for(i=0; i<n; ++i)
        printf("%d ", a[i]);
    printf("\n");
    return 0;
}
int insert(int d[], int n, int m)
{
    int i = n-1;
    while(i>=0&&d[i]>m )  //把大数往后“搬”,腾出位置保存n
    {
        d[i+1] = d[i];
        i--;
    }
    i++;
    d[i] = m;   //找到了确定的位置赋值
    n++;
    return n;   //返回值为数组中新的有效数据的个数
}



上一篇:用C语言设计光线成像程序——计算机达人成长之路(26)


下一篇:什么是线程安全