⑴ 折半查找的演算法怎麼寫 c語言
#include<stdio.h>
void main()
{
int in[15],ins,i,k=14,j=0;
printf("請按照從小到大的順序輸入15個數\n");
for(i=0;i<15;i++) scanf("%d",&in[i]);
printf("請輸入要查找的數:");
scanf("%d",&ins);
i=(j+k)/2;
while(j<=k)
{
if(in[i]>ins)
k=i-1;
else
if(in[i]<ins)
j=i+1;
else break;
i=(j+k)/2;
}
printf("你查找的是其中的第%d個數。",i+1);/*i是他的存儲的順序數,i+1才是他在輸入數組中的位置數*/
}
⑵ c語言編程實現「折半查找」的過程。
//參考代碼如下:
#include <stdio.h>
int main()
{
int i, j, n, k=0, isFound=0;
int num[15] = {88,86,75,74,61,56,52,43,39,34,31,22,18,16,8}; //測試數組
printf("請輸出一個整數:\n");
scanf("%d", &n);
i = (int)15/2; //對折位移量
j = (int)15/2; //取數「指針」
while(k<2)
{
i = (int)i/2;
if(i == 0) k++; //i==0 即折半到無可再折時,仍有最後一次比較,故以k做計數
//若未相等,計算下一循環指針的位置
if(n<num[j])
j = j + (i + 1);
else if(n>num[j])
j = j - (i + 1);
else
{
isFound = 1;
break; //若找到相等數,標記已找到並退出循環
}
}
//輸出結果
if(isFound)
printf("該數是數組中第%d個元素的值\n", j);
else
printf("查無此數!\n");
return 0;
}
⑶ 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語言折半查找 求助大佬
#include <stdio.h>
void sort(int a[],int n)
{
int i,j,t;
for(i=0;i<n-1;++i)
{
for(j=0;j<n-i-1;++j)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
int search(int a[],int n, int s)
{
int i,j;
for(i=0,j=n-1;printf("%5d",(i+j)/2),i<j;)
{
if(a[(i+j)/2]<s)
i=(i+j)/2+1;
else
j=(i+j)/2-1;
}
return a[(i+j)/2]==s?(i+j)/2:-1;
}
int main()
{
int a[10],i,s;
for(i=0;i<10;++i)
scanf("%d",&a[i]);
scanf("%d",&s);
sort(a,10);
for(i=0;i<10;++i)
printf("%5d",a[i]);
printf(" ");
printf(" %s",search(a,10,s)>=0?"Success":"Fail");
return 0;
}
⑸ 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>
intlook_up(inta[],intn,intx)
{
intleft=0,right=n-1,mid;
while(left<=right)
{
mid=(left+right)/2;
if(x==a[mid])
returnmid+1;//加一後才是它的邏輯位序
elseif(x<a[mid])
right=mid-1;
else
left=mid+1;
}
if(left>right)
return-1;
}
intmain()
{
inta[100],n,x,i,result;
scanf("%d",&n);
for(i=0;i<n-1;i++)
scanf("%d,",&a[i]);
scanf("%d",&a[i]);
scanf("%d",&x);
result=look_up(a,n,x);
if(result>=0)
printf("%d
",result);
else
printf("No
");
}
⑺ C語言折半查找法詳細代碼(假如有10個已排好序的數)
折半查找即二分查找,思想是:在一組有序的數據中查找一個數據,首先將要查找的數據與這組數中間的值比較,如果要查找的數據比它小,則在左半部分中繼續查找;若比中間值大,則在右半部分中繼續查找,相等的話就表示已找到,直接返回。
這樣,每次查找都可以將查找范圍縮小一半,以此達到O(log N)的時間復雜度。
折半查找代碼如下:
intbsearchWithoutRecursion(intarray[],intlow,inthigh,inttarget)
{
while(low<=high)
{
intmid=(low+high)/2;
if(array[mid]>target)
high=mid-1;
elseif(array[mid]<target)
low=mid+1;
else
returnmid;
}
return-1;
}
⑻ 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>
// 在長度為len的數組a中尋找n,找到就返回數組下標,沒找到就返回-1
int search(int a[], int len, int n)
{
int index = -1;
int left = 0, right = len, mid = (left + right) / 2;
while (left <= right)
{
if (n == a[mid])
{
index = mid;
break;
}
elseif (n > a[mid])
{
left = mid + 1;
mid = (left + right) / 2;
}
else
{
right = mid - 1;
mid = (left + right) / 2;
}
}
return index;
}
int main()
{
int array[] = {5, 8, 13, 17, 23, 25, 29, 50, 53}; // 數組
int length = 9; // 數組長度
int aim = 17; // 查找目標
// 輸出查找結果, Search 17 in array[]: 3
printf("Search %d in array[]: %d\n", aim, search(array, length, aim));
return0;
}