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

用c語言實現折半查找

發布時間: 2022-09-22 13:21:21

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>

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語言中怎麼用折半查找法查找字元

前提是有序
序列。排序是比較的字元的ASCII碼
先排序在查找
#include
<stdio.h>
#include<stdlib.h>
#include<string.h>
#define
N
10
void
bubble(char
str[])
{
int
i,j;
char
t;
for(i=0;i<strlen(str)-1;i++)
{
for(j=0;j<strlen(str)-i-1;j++)
if(str[j]>str[j+1])
{
t=str[j];
str[j]=str[j+1];
str[j+1]=t;
}
}
}
void
select(char
str[],char
c)
{
int
l=0,h=strlen(str),i;
while(l<=h)
{
i=(l+h)/2;
if(str[i]==c)
{
printf("The
character
is
the
%dth
in
the
array.",i+1);
return;
}
else
if
(str[i]>c)h=i-1;
else
l=i+1;
}
printf("The
character
cannot
be
found.");
}
int
main(void)
{
int
i;
char
str[]="streetsovc";
char
c='r';
//要查找對象
printf("%d",strlen(str));
bubble(str);
printf("拍序後\n");
printf("%s\n",str);
select(str,c);
system("pause");
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>

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()
{
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語言實現折半查找

#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語言編寫非遞歸演算法實現折半查找(二分查找)

char
a[10][5];//按字典序遞增
int
search(char
*x)//二分查找,返回有序表中大於等於x的元素位置
{
int
low=0,high=9,mid,t;
while(low<=high)
{
mid=(low+high)/2;
t=strcmp(a[mid],x);//比較中點位置與x
if(t==0)
return
mid;//相等返回其位置
else
if(t>0)
high=mid-1;//x小於mid元素,則在中點前
else
low=mid+1;
}
return
high+1;//返回大於x的第一個元素
}
這個是我曾經用過的字元串的二分查找~
請根據需要修改數據類型。。。

⑼ 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;
}

⑽ 折半查找的演算法怎麼寫 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才是他在輸入數組中的位置數*/
}