❶ c語言如何用二分法查找一個數.我要一個例題
//二分法查找一個數,原數列必須是有序的,
//有個問題,當數列中有相同的數怎麼處理,也就是只找到其中一個
void binsrch( int m[N],int k){
int low,high,mid;
low=0;high=N-1;
while (low<=high){
mid=(low+high)/2;
if (k>m[mid])
high=mid-1;
if (k<m[mid])
low=mid+1;
if (k==m[mid]){
printf("找到此數在數組的%d位,值為%d",mid+1,k);
return;
}
}
printf("沒有找到此數,非常報歉");
return;
}
❷ 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;//比較的是數值而不是下標
else if(k>a[m]) low=m+1;
else
{
printf("yes");
return;//這兩句地方放錯了
}
}
printf("no");
return;//if語句去掉
}
❸ 誰能用c語言幫我寫個二分法的查找程序
#include<stdlib.h>
void
sort(int
a[],int
n){
/*排序函數,要使用二分法查找就必須對數組進行排序*/
int
i,k;
for(i=0;i<n;i++){
int
min=i;
for(k=i+1;k<n;k++)
if(a[min]>a[k])min=k;
if(i!=min){
a[min]+=a[i];/*這里是運用加減法交換兩個數*/
a[i]=a[min]-a[i];
a[min]-=a[i];
}
}
}
int
find(int
a[],int
n,int
key){/*二分法查找;參數:數組名,數組長度,查找關鍵字*/
int
min=0,max=n-1;/*二分法查找頭尾變數*/
while(min<max){/*如果最頭的變數值大於最尾變數的值,則查找不到,查找失敗*/
int
cen
=
(min+max)/2;
if(a[cen]==key)
return
cen;/*如果查到,則返回關鍵字在排序數組的下標*/
if(cen==min
||
cen==max)break;/*如果中間變數等於頭尾任一個變數,同樣查找失敗*/
if(a[cen]>key)
max=cen;
else
min=cen;
}
return
-1;
}
void
main(){/*主程序只是為了證明兩個函數的可行性,可以自己編寫*/
int
a[]={14,10,25,36,87,95,10,12,13,8},i;
sort(a,10);
i=find(a,10,11);
if(i!=-1)
printf("be
found");
else
printf("no
found");
getch();
}
❹ C語言編程中什麼是二分法
二分法查找,比如要從100個元素里找a元素,那麼先分成兩組,每組50,搜索一組,如果沒有就將另一組分成兩組25個,
再繼續查找,每次搜索結束都將數目均分為兩份
❺ 怎麼用C語言求二分法
二分法查找有一個前提,數據應該是排好序的,假設從小到大排列,則:
首先用中間那個數(也可以不是正中間,差一兩位沒有關系,只要保證不忽略數據就行)與查找值比較,大於查找值就跳到左邊。
然後重新設定新的數列。新的數列為,從最小的數值到中間那個數。
以這個新的數列為基礎,重復以上步驟。
❻ 如何用c語言的二分法查找從鍵盤輸入的任一個數是否在有序數列中
我運行過了,沒錯,基本符合你的要求,你可以試試看。
#include
<stdio.h>
#define
N
10
void
main()
{
int
i,number,top,bott,mid,loca,a[N],flag=1,sign;
char
c;
printf("請輸入10個數字:\n");
scanf("%d",&a[0]);
i=1;
while(i<N)
{scanf("%d",&a[i]);
if(a[i]>=a[i-1])
i++;
else
printf("輸入數字順序不是由小到大請重輸:\n");
}
printf("\n");
for(i=0;i<N;i++)
printf("%2d",a[i]);
printf("\n");
while(flag)
{printf("請輸入要查找的數字:");
scanf("%d",&number);
sign=0;
top=0;
bott=N-1;
if((number<a[0])||(number>a[N-1]))
loca=-1;
while((!sign)&&(top<=bott))
{mid=(bott+top)/2;
if(number==a[mid])
{loca=mid;
printf("在數組中發現數字
%d,在數組中該數字是第%d位\n",number,loca+1);
sign=1;
}
else
if(number<a[mid])
bott=mid-1;
else
top=mid+1;
}
if(!sign||loca==-1)
printf("在數組中沒有數字
%d.\n",number);
}
}
❼ C語言 二分法查找問題
#include
<stdio.h>
void
main()
{
float
x0,x1,x2,fx0,fx1,fx2;
do{
printf("enter
x1
&
x2:");
scanf("%f,%f",&x1,&x2);
fx1=(x1*(2*x1-4)+3)*x1-6;
fx2=(x2*(2*x2-4)+3)*x2-6;
}while(fx1*fx2>0);
/*如果f(x1),f(x2)同號,則在[x1,x2]區間無實根,重新輸入x1,x2
*/
do{
x0=(x1+x2)/2;
/*求x1和x2間的中點:x0=(x1+x2)/2
*/
fx0=(x0*(2*x0-4)+3)*x0-6;
if((fx0*fx1)<0){ /*如f(x0)與f(x1)不同號,把x0賦給x2,把f(x0)賦給f(x2)*/
x2=x0;
fx2=fx0;
}
else{ /*否則,把x0賦給x1,f(x0)賦給f(x1)*/
x1=x0;
fx1=fx0;
}
}while(fabs(fx0)>=1e-5);/*判斷f(x0)的絕對值是否小於某一個指定的值(如10的負5次方)*/
printf("x=%6.3f\n",x0);
/*輸出x0*/
}
❽ 順序表的排序,二分法查找的c語言程序
#include<stdio.h>
int fun(int a[],int n,int key)
{i
nt low,mid,high;//low、mid、high是三個索引分別指向數組的下標low=0;//low指向數組a[]的第一個元素,即下表為0的元素
high=n-1;//lhigh指向數組a[]的最一個元素,即下表為n-1的元素,n為數組的長度
while(low<=high)//循環終止條件是low>high的時候
{
mid=(low+high)/2;//所謂二分查找就在這里,每次都讓mid指向數組下標等於low和high之和的一半的元素i
f(key<a[mid])//如果a【mid】大於要查找的元素,說明要查找的元素在low和mid之間,這是需要把high重新置為mid-1
(high=mid-1);//這里應該是{},不能使()吧
else if(key>a[mid])//這里同理,如果a【mid】小於要查找的元素,說明要查找的元素在mid和high之間,這是需要把low重新置為mid+1
(low=mid+1);
else
return mid;//剩下的就是相等的情況,直接返回mid就是查找到的結果
}
return -1;//執行到這一步就說明,low>high,沒有找到要查找的元素,返回-1表示沒有結果
}
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int a,b,c;
b=4;
c=fun(a,10,b);
if(c==1)
printf("not found");
else
printf("psition %d\n",c);
}
❾ C語言中二分法查找問題
就按這個例子來說吧left = 1 right =6 mid = (left+right)/2=3就是先比較103和5 103>5 left=mid+1=4 right = 6mid= (4+6)/2=5比較103 103 相等 退出