c语言 2分法,C语言中的2分法是什么意思 如何弄 例如这题

C语言中的2分法是什么意思 怎么弄 例如这题

(4)将20个数存放在一个数组中,首先使用选择法对这20个数按升序排列,并输出排序后的结果;然后从键盘输入一个数,要求用二分查找的方法找出该数在数组中的位置(即下标),如果该数不在数组中,则输出“无此数”。

提示:首先利用一个二重循环实现选择排序;然后使用单重循环来实现二分查找。

测试实例:

输入:100 10 -125 -9 0 90 70 60 300 -250 -72 39 48 22 83 159 142 -129 -24 539

输出:-250 -129 -125 -72 -24 -9 0 10 22 39 48 60 70 83 90 100 142 159 300 539

输入:-129

输出:17

输入:301

输出:无此数

------解决思路----------------------

不知道楼主还记不记得,高中时候 的二分法求解方程近似解.

------解决思路----------------------

For reference only

#include

/*选择排序*/

void select_sort(int *arry, int len)

{

int i,j,tmp;

for(i = 0; i 

for(j = i+1; j 

{

if( arry[j] 

{

tmp = arry[i];

arry[i] = arry[j];

arry[j] = tmp;

}

}

}

/*二分查找*/

int binary_search(int *arry, int len, int key)

{

int low = 0,high = len - 1 ;

int mid = (low + high) / 2;

while(low 

{

if(arry[mid] == key)

return mid;

else if(arry[mid] 

{

low = mid + 1 ;

mid = (low + high) / 2;

}

else

{

high = mid - 1;

mid = (low + high) / 2;

}

}

/*数组中没有key*/

return -1;

}

int main()

{

int test[20];

int i;

printf("输入:");

for(i = 0; i 

{

scanf("%d",&test[i]);

}

/*选择排序*/

select_sort(test,20);

printf("输出:");

for(i = 0; i 

{

printf("%d ",test[i]);

}

while(1)

{

char ch;

int n;

int key;

printf("输入:");

scanf("%d",&key);

n = binary_search(test,20,key);

if(n >= 0)

{

printf("输出:%d\n",n);

break;

}

else

{

printf("输出: 无此数\n");

}

}

}

------解决思路----------------------

思路如下:

排序后,因为升序排列,所以元素值大的对应的下标大,即下标从0~19,而元素值也依次增大,可以先选取【0】跟【19】对应的元素值,Avr = (a[0]+a[19])/2,如果当前要比较的数值Cur_data 

------解决思路----------------------

15480180.jpg

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值