當前位置:首頁 » 編程語言 » c語言折半查法
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言折半查法

發布時間: 2022-09-03 23:06:09

c語言折半查找法

折半查找法是演算法一種,可以被任何計算機語言使用。用C語言自然也可以實現。

1、定義:

在計算機科學中,折半搜索(英語:half-interval search),也稱二分搜索(英語:binary search)、對數搜索(英語:logarithmic search),是一種在有序數組中查找某一特定元素的搜索演算法。

搜索過程從數組的中間元素開始,如果中間元素正好是要查找的元素,則搜索過程結束;如果某一特定元素大於或者小於中間元素,則在數組大於或小於中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較。如果在某一步驟數組為空,則代表找不到。這種搜索演算法每一次比較都使搜索范圍縮小一半。

2、查找規則:

折半查找法是效率較高的一種查找方法。假設有已經按照從小到大的順序排列好的五個整數a0~a4,要查找的數是X,其基本思想是: 設查找數據的范圍下限為l=0,上限為h=4,求中點m=(l+h)/2,用X與中點元素am比較,若X等於am,即找到,停止查找;否則,若X大於am,替換下限l=m+1,到下半段繼續查找;若X小於am,換上限h=m-1,到上半段繼續查找;如此重復前面的過程直到找到或者l>h為止。如果l>h,說明沒有此數,列印找不到信息,程序結束。

3、C語言參考代碼:

intbin_search(intA[],intn,intkey){
//在長度為n的數組A中折半查找值為key的元素,並返回下標值。如果不存在則返回-1.
intlow,high,mid;
low=0;
high=n-1;//初始low和high為數組的兩端。
while(low<=high)
{
mid=(low+high)/2;//查找中心點。
if(A[mid]==key)returnmid;//已找到,返回下標值。
if(A[mid]<key){//中點位置比key值小,以mid+1為新的下限值。
low=mid+1;
}
if(A[mid]>key){//中點位置比key值大,以mid-1為新的上限值。
high=mid-1;
}
}
return-1;//未找到,返回-1.
}

Ⅱ C語言 折半查詢法

void find(int y[],int n)
{
//int m,l=1,h=n,x,k=0;//l、h應該是數組下標的低和高,所以初始化時是0和n-1
int m,l=0,h=n-1,x,k=0;
printf("input a number:\n");
scanf("%d",&x);
while(l<=h)//如果只取小於的話會漏掉最大的。除非判斷只有兩個的情況
{
m=(l+h)/2;
if(x==y[m])
{
k=1;break;
}
//else if(m<y[m]) h=y[m-1];//m和h是下標y[m]和y[m-1]是值
else if (x<y[m]) h= m-1;
//else l=y[m+1];
else l=m+1;
}

if(k) printf("%d is the No.%d number.\n",x,m+1);
else printf("There is no %d in the array.",x);
}

Ⅲ C語言折半查找法

#include<stdio.h>

int main()

{

char a[12]="abcdefklmnp",ch;

int i,top,bot,mid;

printf("Input a character ");

scanf("%c",&ch);

printf("ch=%c ",ch);

top=11;

bot=0;

mid=(top+bot)/2;

while(bot<=top&&a[mid]!=ch)

{if(a[mid]>ch)top=mid-1;

else if(a[mid]==ch)break;

else bot=mid+1;

mid=(top+bot)/2;

}

if(a[mid]==ch)printf("第%d個字元就是%c ",mid+1,ch);

if(bot>top)printf("該字元不存在a中 ");

return 0;

}

Ⅳ 用c語言實現折半查找

#include<stdio.h>

int find(int a[],int x,int n,int m)

{int i;

if(n>m)return -1;

i=(n+m)/2;

if(a[i]==x)return i;

if(a[i]>x)return find(a,x,n,i-1);

return find(a,x,i+1,m);

}

int main()

{

int a[20]={2,3,6,7,12,18,19,21,25,28,30,33,37,39,42,45,47,49,50,51};

int x,i;

printf("已有的數是: ");

for(i=0;i<20;i++)

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

printf(" 請輸入要查找的數:");

scanf("%d",&x);

if((i=find(a,x,0,19))>=0)

printf("%d是第%d個數 ",x,i+1);

else printf("未找到%d ",x);

return 0;

}

Ⅳ C語言中的「折半查找法」是什麼

折半查找法也稱為二分查找法,它充分利用了元素間的次序關系,採用分治策略,可在最壞的情況下用O(log n)完成搜索任務。
例如排序後的數據是1 5 12 35 64 78 89 123 456
你要查找12,首先用12跟上面排好順序的9個數中間那個比較(64),12<64,因此你查找的數據在前半部分,即1 5 12 35 64,再用12跟前半部分中間那個數比較(12),這樣找了2次就找到了
折半查找的目的是提高查找的效率!

Ⅵ c語言中的折半查找法是什麼原理

剛開始的時候數組時排好順序的:從小到大,或者從大到小。然後將這個數組折中,用中間的這個數和要查找的數比較大小,(例如:如果我從小到大,我將數組這種後,用中間的數和要查找的數比較,如果小,則那個要查找的數絕對在中間靠左的范圍里,如果大,則那個要查找的數絕對在中間靠右的范圍里,然後同理,慢慢慢慢縮小范圍,知道查找到為止)

Ⅶ C語言程序編寫——折半查找法

#include<stdio.h>
intmain()
{inta[16]={15,14,13,12,11,10,9,8,7,6,5,4,3,1,0};
intl=0,r=15,mid,x;
scanf("%d",&x);
do
{mid=(l+r)/2;
if(a[mid]==x)break;
if(x>a[mid])r=mid-1;
elsel=mid+1;
}while(l<=r);
if(a[mid]==x)
printf("a[%d]=%d ",mid,x);
else
printf("無此數 ");
return0;
}

Ⅷ c語言的折半查找法

你的數組的索引為0-14
所以你可以設兩個變數
這兩個變數a,b是用來限制你要的數的范圍的

一開始a=0 b=14
接著取索引為int((a+b)/2 )的元素與你輸入的比較
如果比輸入的小的話那麼設a=int(a+b)/2 )
接著繼續取索引為int((a+b)/2 )的元素與你輸入的比較
如果比輸入的大的話那麼設b=int(a+b)/2 )繼續找下去 如果相等的話就列印並break
不然一直到a=b退出循環

Ⅸ c語言編程實現「折半查找」的過程。

折半查找的演算法思想是將數列按有序化(遞增或遞減)排列,查找過程中採用跳躍式方式查找,即先以有序數列的中點位置為比較對象,如果要找的元素值小於該中點元素,則將待查序列縮小為左半部分,否則為右半部分。通過一次比較,將查找區間縮小一半。 折半查找是一種高效的查找方法。它可以明顯減少比較次數,提高查找效率。但是,折半查找的先決條件是查找表中的數據元素必須有序。參考程序,希望對你有所幫助!
#include<stdio.h>
void main()
{
int a[20],x,i,start,end;
printf("input 20 numbers:\n");
for(i=0;i<20;i++) scanf("%d",&a[i]);
printf("please enter the number:\n");
scanf("%d",&x);
for(start=0,end=19;start<=end;)
{
i=start+(end-start)/2;
if (x==a[i])
{
printf("%d",i+1);
getch();
return;
}
else if (x>a[i]) end = i-1;
else start=i+1;
}
}