C语言:有n个已按从小到大的顺序排好的数组,现输入一个数要求按原来排序的规律将它插入数组中
问题描述:
怎样解决“n个”的编写问题,“n个”应该怎样解决。
答
假设输入的数按从小到大排序
#define N 1000
int main(void){
int a[N] = { 0 };
int n,i,m,j;
scanf_s("%d", &n);
for (i = 0; i < n; i++)
scanf_s("%d", &a[i]);
scanf_s("%d", &m);
for (i = 0; i < n;i++)
if (a[i] >= m)
{
for (j = n - 1; j >= i; j--)
{
a[j+1] = a[j];
}
a[i] = m;
}
if (i == n)
a[n] = m;
return 0;
}
答
一种是动态分配空间,一种是先申请一个比较大的数组空间
答
数组插入的话只能从新申请一个大的内存,可以使用list和vector。或者如下:
#include <stdio.h>
int* Insert(int a[],int size,int value)
{
int *p = new int[size +1];
if (a[size-1] < value)
{
for(int i = 0; i < size; i++)
p[i] = a[i];
p[size] = value;
return p;
}
int index = 0;
bool b = true;
for (int i = 0; i < size; i++)
{
if (a[i]< value)
{
p[index] = a[i];
index++;
}else
{
if (b)
{
p[index] = value;
index++;
p[index] = a[i];
index++;
b = false;
}else
{
p[index] = a[i];
index++;
}
}
}
return p;
}
int main()
{
int a[] = {1,3,5,7,9,11,13};
int *p = Insert(a,7,8);
for (int i = 0; i < 8; i++)
{
printf("%d ",p[i]);
}
delete[] p;
p = 0;
getchar();
return 0;
}
答
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632