向一组数中插入一个数的代码及理解

最近学校学习递归,一开始想用递归做,做完发现好麻烦,就改成循环了,以下贴代码,记入一下自己遇到的问题和理解:

#include<stdio.h>
int main()
{
 int a[20]={1,5,9,12,16,19,26,48,69,79,88,95};
 int i,b,n,t;
 int find(int *,int,int,int b);//找到那个数是第几位 
 void sort(int *,int ,int);//将那一位以后的向后移。 
 
 printf("输入共有几个数:");
 scanf("%d",&n); 
 printf("输入要插入的数:");
 scanf("%d",&b);
 
 t=find(a,0,n-1,b);
 sort(a,t,n-1);
 a[t]=b;
 
 for(i=0;i<n+1;i++){
  printf("%-4d",a[i]);
 }
 
 return 0; 
} 

这个没什么解释的,就是主函数。

int find(int *p,int fir,int end,int b)
{
 int mid,isPrime=1;
 mid=(fir+end)/2;
 while(isPrime){
  if(b>p[mid]){
   fir=mid+1;
   mid=(fir+end)/2;
  }else if(b==p[mid]){
   isPrime=0;
  }else{
   end=mid-1;
   mid=(fir+end)/2; 
  }
  if(p[mid+1]>b&&p[mid]<b){
   mid=mid+1;
   isPrime=0;
  }
  if(p[mid]>b&&p[mid-1]<b){
   isPrime=0;
  }
 }
 return mid;
}

这个函数中要注意,这里分情况

if(p[mid+1]>b&&p[mid]<b){
   isPrime=0;
  }
  if(p[mid]>b&&p[mid-1]<b){
   isPrime=0;
   mid=mid-1; 
  }

每次都取它后面的值,因为之后我们要对它返回的位数都后移,后移后会出现(假如我要插20)19.19这样的情况,如果不分情况,在不同数时输出的结果时对时错,如果取
前就是20.19的情况。
最后的一段就是后移,如下:

void sort(int *p,int t,int len)
{
 int i;
 for(i=len;i!=t-1;i--){
  p[i+1]=p[i];
 }
}

整体大概就是二分法的思想,希望能帮到有需要的人,我也会一直认真的写下博客,记录自己从大一开始的学习历程!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值