有一个已经排好序的数组,今输入一个数,要求按原来的排序的规律将它插入数组中,编程用子函数实现该功能

有一个已经排好序的数组,今输入一个数,要求按原来的排序的规律将它插入数组中,编程用子函数实现该功能,且在主函数中输出结果。... 有一个已经排好序的数组,今输入一个数,要求按原来的排序的规律将它插入数组中,编程用子函数实现该功能,且在主函数中输出结果。 展开
 我来答
瑞候端瓜0Y
2017-06-27 · TA获得超过2039个赞
知道小有建树答主
回答量:323
采纳率:100%
帮助的人:103万
展开全部
测试结果:

数组的数据: 10 20 30 40 50 60 70 80 90 100
输入要插入的数据: 5
插入数据后: 5 10 20 30 40 50 60 70 80 90 100


//方案1: 用折半插入法
#include <stdio.h>

void printData(int data[],int n)
{
    int i;
    for(i=1;i<=n;i++)
    {
        printf("%d ",data[i]);
    }
     printf("\n");
}

//在有序数组插入数据,用折半插入法
void InsertData(int data[],int *n,int x)
{
    int j;
    int theLen;
    int low,high,mid;

    theLen=*n;
    data[0]=x;
    low=1;
    high=theLen;
    while(low<=high)
    {
        mid=(low+high)/2;
        if(data[mid] > data[0])
        {
            high=mid-1;
        }
        else
        {
            low=mid+1;
        }
    }
    for(j=theLen ; j>=high+1 ; j--)
    {
        data[j+1]=data[j];
    }
    data[high+1]=data[0];
    theLen++;
    *n=theLen;
}

int main()
{
    int data[100];
    int n=10;
    int x;
    int i;

    //从data[1]开始存放数据
    for(i=1;i<=n;i++)
    {
        data[i]=i*10;
    }
    printf("数组的数据: ");
    printData(data,n);

    printf("输入要插入的数据: ");
    scanf("%d",&x);
    InsertData(data,&n,x);
    printf("插入数据后: ");
    printData(data,n);

    return 0;
}

////////////////////////////////////////////////////////////

// 方案2: 用直接插入法
#include <stdio.h>

void printData(int data[],int n)
{
    int i;
    for(i=1;i<=n;i++)
    {
        printf("%d ",data[i]);
    }
     printf("\n");
}

//在有序数组插入数据,用直接插入法
void InsertData(int data[],int *n,int x)
{
    int j;
    int theLen;

    theLen=*n;
    data[0]=x;

    for(j=theLen ; data[0]<data[j] ; j--)
    {
        data[j+1]=data[j];
    }
    data[j+1]=data[0];

    theLen++;
    *n=theLen;
}

int main()
{
    int data[100];
    int n=10;
    int x;
    int i;

    //从data[1]开始存放数据
    //data[0]用作哨兵
    for(i=1;i<=n;i++)
    {
        data[i]=i*10;
    }
    printf("数组的数据: ");
    printData(data,n);

    printf("输入要插入的数据: ");
    scanf("%d",&x);
    InsertData(data,&n,x);
    printf("插入数据后: ");
    printData(data,n);

    return 0;
}
lijunyin168
2007-09-09 · TA获得超过391个赞
知道小有建树答主
回答量:187
采纳率:0%
帮助的人:168万
展开全部
呵呵,有点难度哦,要求加分,不用链表,自己写的,参考一下:
#include<stdio.h>
void conv(int b[],int n) //排序函数(从小到大)
{
int i,j,temp;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
if(b[i]>b[j])
{
temp=b[i];
b[i]=b[j];
b[j]=temp;
}
}
}
void main()
{
int a[9]={1,2,5,6,4,8}; //花括弧内元素的个数至少要比9少1
int c;
int n=0;
while(a[n++]); //统计元素的个数
int j=n; //保存元素的个数
conv(a,n); //调用排序函数
printf("input a number:");
scanf("%d",&c); //输入你要插入的数字
int i;
for(i=0;i<n;i++) //寻找该数字在排好序的数组内的位置
if(c<a[i]) //找到了
{
n++; //元素个数加1,给新元素留个位置
for(;n>i;n--)
{
a[n]=a[n-1]; //自第i个元素后的元素都后移一个位置
}
a[i]=c; //将新插入的元素放到该位置
}
for(n=0;n<j+1;n++)
printf("%d ",a[n]); //打印新数组
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友af6bfe3407
2012-10-19
知道答主
回答量:29
采纳率:0%
帮助的人:28.1万
展开全部
#include "stdio.h"
main()
{
int a[11]={1,4,6,9,13,16,19,28,40,100};
int num,i,j;
printf("Array a:\n");
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
printf("insert data:");
scanf("%d",&num);
for(i=0;i<10;i++)
if(a[i]>num)
{j=a[i];a[i]=num;num=j;}
a[i]=num;
printf("Now,array a:\n");
for(i=0;i<11;i++)
printf("%5d",a[i]);
printf("\n");
}
这绝对正确,我上机验证过了!!要加分啊。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式