您的位置:首页 > 其它

往有序数组中插入数

2016-02-14 17:41 253 查看
/*已知数组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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: