往有序数组中插入数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了往有序数组中插入数相关的知识,希望对你有一定的参考价值。

/*已知数组a中的元素已按由小到大顺序排列,以下程序的功能是将输入的一个数插入数组a中,插入后,数组a中的元素仍然由小到大顺序排列*/

#include <stdio.h>
/**
 *  折半查找法找到需要插入的位置(下标)
 *
 *  @param p      数组
 *  @param num    需要插入的数
 *  @param length 数组元素的个数
 *
 *  @return 需要插入数组对应的下标
 */
int arrayInsertNumber(int *p, int num,int length)
{
    int max = length - 1;
    int min = 0;
    int mid = (max + min)/2;
    
    while (max >= min) {
        mid = (max + min)/2;
        if (num > p[mid]) {
            min = mid + 1;
        }else if (num < p[mid]) {
            max = mid - 1;
        }else {
            return mid;
        }
    }
    return mid - 1;
}

int main(int argc, const char * argv[]) {
    
    int  a[] = {1,3,5,5,7,9,10,19,20,30};
    int length = sizeof(a)/sizeof(a[0]);
    //定义数组b[]保存插入后的数据
    int b[length + 1];
    
    int num;
    printf("请输入需要插入数组中的数字\n");
    scanf("%i",&num);
    //调用函数获取下标
    int index = arrayInsertNumber(a, num, length);
    printf("需要插入数组a[]下标为 %i 的位置\n",index);
    
    int j = 0;
    //遍历数组a[]
    for (int i = 0; i < length ; i++) {
        //index前的数分别对应赋值给b[]
        if (i < index) {
            b[j++] = a[i];
        }
        //index对应的a[i]仍然对应赋值,把num插入到index+1的位置
        else if (i == index) {
            b[j] = a[i];
            b[++j] = num;
        }
        //原a数组index之后的数据依次后移一位
        else {
            b[++j] = a[i];
        }
    }
    printf("插入后的数组为:\n");
    //遍历输出b[]
    for (int i = 0; i < length + 1; i++) {
        printf("%i ",b[i]);
    }
    printf("\n");
    return 0;
}

 

以上是关于往有序数组中插入数的主要内容,如果未能解决你的问题,请参考以下文章

输入若干有序数放在数组中。然后输入一个数,插入到此有序数列中,插入后,数组中的数仍然有序。

在c语言中,将一个数插入一个数组中的程序怎么写?

java 数组排序 插入排序法

在一个有序数列中插入一个数重新进行排序

有序数组合并

这样的插入排序