设有一个已排好序的数组,输入一个数,按原规律将它插入
例如:
原:a[10] = { 1,3,5,7,9,11,13,15,17,19 }
插入:18
新:a[10] = { 1,3,5,7,9,11,13,15,17,18 }
思路:
1.不管是数组是否有序,插入的关键就是找到要插入的**位置(下标)**option
2.然后再从该位置开始重新排序
实现代码:
void addnum(int n)
int i, option = 0;//option即要插入的位置,先默认为第一个位置
int a[11] = { 1,3,5,7,9,11,13,15,17,19 }; //升序排序,这里是默认为已经排好序的数组
printf("pre:");
for (i = 0; i < 10; i++)
printf("%3d", a[i]);//打印原数组顺序
if (a[0] < a[1])
while (n > a[option])//n为要插入的数
//找到应该插入的位置
option++;
else
//降序排序
while (n < a[option])
//找到应该插入的位置
option++;
//找到option,进行插入
for (i = 10; i > option; i--) {//从插入位置开始重新排序
a[i] = a[i - 1];
}
a[i] = n;
printf("\nnow:");
for (i = 0; i < 11; i++)
{
printf("%3d", a[i]);//这里循环的原数组长度加1是为了让大家看到结果的变化
}
printf("\n");
}
运行代码:
int main() {
addnum(20);//插入20
addnum(10);//插入10
}
运行结果
从一个已排序好的数组中删去某个位置上的元素
思路与插入是一样的,直接上代码
void delnum(int option)
{
int i;
int a[10] = { 1,3,5,7,9,11,13,15,17,19 };
printf("要删除是:a[%d]=%d\n",option,a[option]);
printf("原顺序:");
for (i = 0; i < 10; i++)
{
printf("%3d", a[i]);
}
//找到option,进行删除
for (i = option; i < 9; i++)
a[i] = a[i + 1];
a[9] = '\0';
printf("\n现顺序:");
for (i = 0; i < 9; i++)
{
printf("%3d", a[i]);
}
printf("\n");
}
运行代码:
int main() {
delnum(8);
}
运行结果:
注:我这里主要是讲解思路,至于排序,以及插入数字(位置)如果不再数字范围内,这里没有详细写
学习资料:《C语言程序设计》