题目分析
首先要知道一个已经排好序的数组是定长的,如果要像该数组中插入一个数,肯定需要将该数组扩容或者说定义一个新的数组(原来的数组长度 + 1),其次就是将插入的数对比原有数组进行排序。
代码实现
#include <stdio.h>
int main()
{
//这里初始化的是一个升序排序的数组,如需降序,可手动更改即可
//后面代码保持不变
int pSou[10] = { 1, 4, 6, 8, 10, 34, 56, 60, 67, 100 };
//定义一个新数组
int pNew[11] = { 0 };
int nPutnum = 0;
//因为上面的初始化数组可自定义变换趋势,所以需要一个标志位来
//判断该数组是降序还是升序(0为升序,1为降序)
int nFlag = 0;
//先判断数组是升序还是降序
if (pSou[0] > pSou[1])
{
nFlag = 1;
}
printf("初始化数组为:\n");
for (int nIndex = 0; nIndex < 10; ++nIndex)
{
printf("%d ", pSou[nIndex]);
//将初始化数组的值赋值给新数组
pNew[nIndex] = pSou[nIndex];
}
printf("\n请输入想要插入的数:");
scanf("%d", &nPutnum);
//如果为升序
if (0 == nFlag)
{
//如果输入的数小于第一个数
if (nPutnum <= pNew[0])
{
for (int nIndex = 10; nIndex > 0; --nIndex)
{
//将所有数组元素往后移
pNew[nIndex] = pNew[nIndex - 1];
}
//将输入值赋值给第一个
pNew[0] = nPutnum;
}//如果输入的数大于最后一个数
else if (nPutnum >= pNew[9])
{
pNew[10] = nPutnum;
}//输入的数在中间
else
{
//查找需要插入的位置
for (int nIndex = 1; nIndex < 9; ++nIndex)
{
//找到插入的位置
if (nPutnum <= pNew[nIndex])
{
int nIdx = 0;
for (nIdx = 10; nIdx > nIndex; --nIdx)
{
//将插入位置之后的所有元素往后移
pNew[nIdx] = pNew[nIdx - 1];
}
pNew[nIdx] = nPutnum;
break;
}
}
}
}
else//如果为降序
{
//如果输入的数大于第一个数
if (nPutnum >= pNew[0])
{
for (int nIndex = 10; nIndex > 0; --nIndex)
{
pNew[nIndex] = pNew[nIndex - 1];
}
pNew[0] = nPutnum;
}//如果输入的数小于最后一个数
else if (nPutnum <= pNew[9])
{
pNew[10] = nPutnum;
}//输入的数在中间
else
{
for (int nIndex = 1; nIndex < 9; ++nIndex)
{
if (nPutnum >= pNew[nIndex])
{
int nIdx = 0;
for (nIdx = 10; nIdx > nIndex; --nIdx)
{
pNew[nIdx] = pNew[nIdx - 1];
}
pNew[nIdx] = nPutnum;
break;
}
}
}
}
//输出
printf("插入后的数组为:\n");
for (int nIndex = 0; nIndex < 11; ++nIndex)
{
printf("%d ", pNew[nIndex]);
}
printf("\n");
return 0;
}