在已排好序的数组中,按原来排好的规律插入或删除一个数

设有一个已排好序的数组,输入一个数,按原规律将它插入
例如:
原: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语言程序设计》

猜你喜欢

转载自blog.csdn.net/weixin_36027342/article/details/80717863