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

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

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用二分查找的方法来找到要插入的位置,然后将该插入数组中。具体步骤如下: 1. 定义一个已排好序数组和要插入。 2. 使用二分查找的方法找到要插入的位置。具体方法是:定义左右两个指针,分别指向数组的第一个和最后一个元素,然后计算中间位置的下标。比较要插入和中间位置的的大小,如果要插入比中间位置的小,则将右指针移动到中间位置的左边一个位置;如果要插入比中间位置的大,则将左指针移动到中间位置的右边一个位置。重复以上步骤,直到左指针和右指针相遇,此时左指针所指的位置就是要插入的位置。 3. 将要插入插入数组中。具体方法是:从要插入的位置开始,将该位置及其后面的元素向后移动一个位置,然后将要插入放到要插入的位置上。 4. 输出插入后的数组。 示例代码如下: ```python # 定义已排好序数组和要插入 arr = [1, 3, 5, 7, 9] num = 4 # 使用二分查找找到要插入的位置 left, right = 0, len(arr) - 1 while left <= right: mid = (left + right) // 2 if num < arr[mid]: right = mid - 1 else: left = mid + 1 pos = left # 将要插入插入数组中 arr.insert(pos, num) # 输出插入后的数组 print(arr) ``` 输出结果为:[1, 3, 4, 5, 7, 9]。 ### 回答2: 要将一个插入已经排好序的数组中,需要遵循一定的插入规则以保证数组继续保持有序性。插入规则如下: 1. 找到插入位置:从数组的起始位置(一般为0)开始,依次比较数组中的每一个元素,直到找到第一个大于要插入的元素位置。 2. 插入元素:找到插入位置后,将要插入插入数组中该位置的前面,同时将该位置后面的元素依次向后移动一个位置。 3. 数组排序:插入完成后,需要检查是否仍然保持有序性,如果插入后破坏了原有的顺序,需要进行排序。 下面是一段将一个插入有序数组的示例代码: int insert(int arr[], int len, int num) { int i = 0; int j = 0; int k = 0; // 找到插入位置 for(i=0; i<len; i++) { if(num < arr[i]) { break; } } // 插入元素后移动其它元素 for(k=len; k>i; k--) { arr[k] = arr[k-1]; } // 插入新元素 arr[i] = num; return 0; } 该函的实现中,在插入位置后,还需要将插入位置后面的元素依次移动一位,这可以使用循环实现,从数组的最后一个位置开始,逐个向前移动元素,知道找到插入位置。 总之,将一个插入到有序数组中,需要遵循一定的插入规则,并且还要保证插入后继续保持有序性。这需要我们仔细考虑插入的过程,并编写相应的代码来实现。 ### 回答3: 假设我们有一个已排好序数组arr=[1,2,4,5,6,8],我们现在需要将字3插入数组中。这个问题可以通过以下步骤解决: 1. 遍历数组,找到第一个插入值大的字的位置。 在这个例子中,我们可以通过遍历数组,找到字4的位置比插入字3大,因此我们需要将字3插入字4之前的位置。 2. 将所有比插入值大的字后移一位。 在这个例子中,字4到8都比插入字3大,因此我们需要将它们都后移一位,为字3腾出位置。 3. 将插入值放到空出来的位置。 此时,空出来的位置就是字4原来的位置,我们需要将字3放到这个位置。 因此,最终数组变成了arr=[1,2,3,4,5,6,8],其中字3被成功插入数组中,并按原始排序规则排列。 实现该算法的代码如下: ``` int insert(int num, int[] arr) { int i, j; for (i = 0; i < arr.length; i++) { if (arr[i] > num) { break; } } for (j = arr.length - 1; j >= i; j--) { arr[j + 1] = arr[j]; } arr[i] = num; return arr.length + 1; } ``` 此代码将插入字作为参num,将当前数组作为参arr传递,使用两个循环来插入字并移动其他字。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值