
有一个已经排好序的数组,今输入一个数,要求按原来的排序的规律将它插入数组中,编程用子函数实现该功能
有一个已经排好序的数组,今输入一个数,要求按原来的排序的规律将它插入数组中,编程用子函数实现该功能,且在主函数中输出结果。...
有一个已经排好序的数组,今输入一个数,要求按原来的排序的规律将它插入数组中,编程用子函数实现该功能,且在主函数中输出结果。
展开
3个回答
展开全部
测试结果:
数组的数据: 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;
}
展开全部
呵呵,有点难度哦,要求加分,不用链表,自己写的,参考一下:
#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]); //打印新数组
}
#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]); //打印新数组
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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");
}
这绝对正确,我上机验证过了!!要加分啊。。。
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");
}
这绝对正确,我上机验证过了!!要加分啊。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询