输入一个数字后按序插入数组

有一个已排好序的数组{1,4,6,9,13,16,19,28,40,100},要求输入一个数后,按原来排序的规律将它插入数组中。排序后输出数组

输入:3 

输出:1 3 4 6 9 13 16 19 28 40 100

#include<stdio.h>
int main() 
{
int i,j,x;
int a[11]={1,4,6,9,13,16,19,28,40,100};
for(i=0;i<11;i++)
{
  scanf("%d",&x);  //赋值
  if(x<a[i])        //插入得数如果小于数组里的数就挪位置     
  {
    for(j=9;j>=i;j--)
    {
      a[j+1]=a[j];
    }
    a[i]=x;break;
  }
  else
  a[10]=x; //大于数组里所有数就放最后一个位置
}
for(i=0;i<11;i++)
printf("%d ",a[i]);
return 0;
}

在C语言中,为了保持数组,你可以使用二分查找法来确定给定数字应该插入的位置。以下是步骤概述: 1. 定义一个函数,比如`insert_sorted`,接受两个参数:已排的整型数组`arr`、数组长度`size`以及需要插入的新数值`num`。 2. 使用二分查找算法找到`num`在现有数组中应插入的位置。这个位置会使得插入后的数组仍然有。查找过程中,检查中间元素是否等于`num`,如果小于则在左半部分继续查找,如果大于则在右半部分查找,直到找到合适的插入点。 ```c int binary_search(int arr[], int size, int num) { int low = 0; int high = size - 1; while (low <= high) { int mid = (low + high) / 2; if (arr[mid] == num) return mid; // 找到相等的元素直接返回 else if (arr[mid] < num) low = mid + 1; // 向右搜索 else high = mid - 1; // 向左搜索 } return low; // 如果没找到相等元素,返回正确的插入位置 } ``` 3. 在找到插入位置后,可以将新值放在该位置,并更新数组大小。 ```c void insert_sorted(int arr[], int* size, int num) { int index = binary_search(arr, *size, num); memmove(&arr[index+1], &arr[index], (*size - index) * sizeof(arr[0])); // 移动元素 arr[index] = num; // 插入数值 (*size)++; } ``` 4. 最后,在主程中调用上述函数并传入相应的参数。 ```c int main() { int arr[] = {1, 4, 6, 9, 13, 16, 19, 28, 40, 100}; int size = sizeof(arr) / sizeof(arr[0]); int new_num; printf("Enter a number to insert: "); scanf("%d", &new_num); insert_sorted(arr, &size, new_num); // 打印插入数组 for (int i = 0; i < size; i++) { printf("%d ", arr[i]); } return 0; } ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值