c語言二分法怎么用,求例子!!
首先二分法必須讓數(shù)列有序,比如說我要在 1 2 3 4 5 6 7 8 9 10中找到5.
#include<stdio.h>
intmain()
{
intlow=0,high=9,m,k,sign=0;
inta[10]=
{
1,2,3,4,5,6,7,8,9,10
};
scanf("%d",&k);
while(high>=low)
{
intm=low+(high-low)/2;
if(a[m]>k)high=m-1;
elif(a[m]<k)low=m+1;
el
{
printf("yes");
sign=1;
break;
}
}
if(sign==0)printf("no");
return0;
}
C語言中二分法的具體程序是什么呢?
舉個例子:
//二分查找法//
#
include
void
main()
{
int
a[16],i,num,flag=0,top,bottom,mid;
//定義一個一維數(shù)組a[16]用來存放供查找用的數(shù)據(jù),但只用a[1]——a[15]//
//num用來放要查找的數(shù)據(jù),flag是表示是否找到的開關變量,top表示查找的起始位置,bottom表示查找的終止位置,mid表示top與bottom的中間位置//
char
goon;
//變量goon為'y'或'Y'時表示繼續(xù)下一輪查找,否則終止程序//
printf("請輸入第1個數(shù)字:\n");
scanf("
%d",&a[1]);
//依次輸入第二到第十五個數(shù),并要求輸入的數(shù)遞減//
for(i=2;i<=15;i++)
{
printf("請輸入第%d個數(shù)字:\n",i);
scanf("
%d",&a[i]);
if(a[i]>=a[i-1])
{
printf("請再次輸入,它應該比上一個數(shù)小:\n");
scanf("
%d",&a[i]);
}
}
//輸出剛才輸入的數(shù)//
printf("你剛才輸入的數(shù)是:\n");
for(i=1;i<=15;i++)
printf("
%d",a[i]);
printf("\n");
//查找循環(huán)開始//
do
{
printf("現(xiàn)在請輸入你要查找的數(shù):\n");//輸入想要查找的數(shù)//
scanf("
%d",&num);
top=15;
bottom=1;
mid=15/2+1;
if(num>a[1]
||
num
0)//如果在規(guī)定的范圍內(nèi),開始二分法查找//
{
if(num==a[mid])//找到所需數(shù)據(jù),退出本層循環(huán)//
{
printf("你所要查找的數(shù)字是第%d個。\n",mid);
flag=1;
}
el
if(num>a[mid])//如果要查找的數(shù)據(jù)比a[mid]大,在前半數(shù)組查找//
{
top=mid+1;
mid=(top+bottom)/2;
}
el
//如果要查找的數(shù)據(jù)比a[mid]小,在后半數(shù)組查找//
{
bottom=mid-1;
mid=(top+bottom)/2;
}
}
if(flag==0)//如果未找到數(shù)據(jù),輸出找不到的信息//
printf("無法找到你要找的數(shù)字!\n");
printf("是否繼續(xù)查找?(Y/N):\n");//詢問是否開始下一輪查找//
scanf("
%c",&goon);
}while(goon=='y'
||
goon=='Y');
}
C語言二分法查找
#include <stdio.h>//不用math頭文件
void main()
{int high = 9,low = 0,m,k,a[10]={1,2,3,4,5,6,7,8,9,10};//hing和low賦初值
scanf("%d",&k);
while (high>=low)//>=
{
m=(high+low)/2;
if(k<a[m]) high=m-1;//比較的是數(shù)值而不是下標
el if(k>a[m]) low=m+1;
el
{
printf("yes");
return;//這兩句地方放錯了
}
}
printf("no");
return;//if語句去掉
}
C語言:二分法
這段代碼是求解方程f(x)=0在區(qū)間[-10,10]上的根的數(shù)值解。
方法的思想就是:一直選取區(qū)間中間的數(shù)值,如果發(fā)現(xiàn)中間的函數(shù)值與一側函數(shù)值,異號,那么說明解在這個更小的區(qū)間中,采用eps=1e-5作為區(qū)間的極限大小,通過迭代的方法求解這個方程的數(shù)值解。
所以了解了上述思想,那么el if(f(a)*f(c)<0) b=c; 說明的是 f(a)和f(c)異號,那么使用b=(a+b)/2縮小迭代區(qū)間,繼續(xù)迭代;同理el a=c;說明f(a)和f(c)同號,那么使用a(a+b)/2縮小迭代區(qū)間,繼續(xù)迭代!
(二分法)C語言程序
1、打開Python開發(fā)工具IDLE,新建‘a(chǎn)rch.py’。
2、F5運行程序,list1被正確排序,寫這個的目的是說明二分法查找必須前提是一個有序的列表,如果一開始無序首先要排序,當數(shù)據(jù)量大的時候,快速排序是一個很好的選擇,再進行二分法查找。
3、用遞歸的思想,遞歸就一定有結束條件。
4、if len(li)==1: #li長度等于1,只比較這個列表元素與要查找到值return li[0]==item。
5、if len(li)==0: #li長度等于0,全部查找結束還是沒有這個值 return Fal。
6、為程序添加main方法。
7、F5運行程序,正確打印出二分法查找結果,F(xiàn)al True。