主函數(shù):
黃山區(qū)ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話(huà)聯(lián)系或者加微信:18980820575(備注:SSL證書(shū)合作)期待與您的合作!
main()
{
RecType *tmp=new RecType[N];
for(int i=0;iN;i++)
tmp[i].key=i;
SSTable sst;
sst.len=N;
sst.list=tmp;
printf("%d",BinarySearch(sst,6,cmp));
}
還要寫(xiě)一個(gè)比較函數(shù)在外邊:
int cmp(KeyDT a,KeyDT b)
{
return a-b;
}
然后就可以用了!
#include stdio.h
#define N 21
void main(void)
{
int a[N];
int i,n,num;
int top,bottom,mid;
int flag=1; //如果在表列中找到數(shù)字,則值為1,否則為0
int loc=-1;//要查找的數(shù)在表列中的位置,如果loca=-1表示表列中沒(méi)有這個(gè)數(shù);如果有這個(gè)數(shù),則它的值為所在的位置
printf("你想在多少個(gè)數(shù)中進(jìn)行折半查找,請(qǐng)輸入(1--20):");
scanf("%d",n);
while(n1 || n20)
{
printf("你輸入的數(shù)不正確,請(qǐng)重新輸入。\n");
printf("你想在多少個(gè)數(shù)中進(jìn)行折半查找,請(qǐng)輸入(1--20):");
scanf("%d",n);
}
printf("請(qǐng)你輸入一個(gè)整數(shù) a[1]:");
scanf("%d",a[1]);
i=2;
while(i=n) //輸入從小到大的表列
{
printf("請(qǐng)你輸入一個(gè)整數(shù) a[%d]:",i);
scanf("%d",a[i]);
if(a[i] a[i-1])
i++;
else
printf("你輸入的數(shù)不滿(mǎn)足要求,請(qǐng)重新輸入。\n");
}
//輸出表列
printf("\n輸出表列\(zhòng)n");
for(i=1; i=n; i++)
{
printf("%6d",a[i]);
}
printf("\n");
printf("請(qǐng)你輸入要查找的數(shù):");
scanf("%d",num);
flag=1; //假設(shè)輸入的數(shù)在表列中
top=n;
bottom=1;
mid=(top+bottom)/2;
while(flag)
{
printf("top=%d, bottom=%d, mid=%d, a[%d]=%d\n",top,bottom,mid,mid,a[mid]);
if( (numa[top]) || (numa[bottom]) ) //輸入的數(shù) numa[top] 或者 numa[bottom],肯定num不在這個(gè)表列中
{
loc=-1;
flag=0;
}
else if(a[mid]==num) //如果num 等于找到的數(shù)
{
loc=mid;
printf("找到數(shù) %6d 的位置%2d\n",num,loc);
break;
}
else if(a[mid]num) //若 a[mid]num,則num 一定在 a[bottom]和a[mid-1]范圍之內(nèi)
{
top=mid-1;
mid=(top+bottom)/2;
}
else if(a[mid]num) //若 a[mid]num,則num 一定在 a[mid+1]和a[top]范圍之內(nèi)
{
bottom=mid+1;
mid=(top+bottom)/2;
}
}
if(loc==-1)
{
printf("%d 這個(gè)數(shù)在表列中沒(méi)有找到。\n",num);
}
printf("折半查找結(jié)束:");
scanf("%d",n);
}
剛開(kāi)始的時(shí)候數(shù)組時(shí)排好順序的:從小到大,或者從大到小。然后將這個(gè)數(shù)組折中,用中間的這個(gè)數(shù)和要查找的數(shù)比較大小,(例如:如果我從小到大,我將數(shù)組這種后,用中間的數(shù)和要查找的數(shù)比較,如果小,則那個(gè)要查找的數(shù)絕對(duì)在中間靠左的范圍里,如果大,則那個(gè)要查找的數(shù)絕對(duì)在中間靠右的范圍里,然后同理,慢慢慢慢縮小范圍,知道查找到為止)
#include?stdio.h
#include?stdlib.h
#include?time.h
#define?N?20
void?Sort(int?a[],int?n)??{
int?i,j,k,t;
for(i?=?0;?i??n?-?1;?++i)?{
k?=?i;
for(j?=?i?+?1;?j??n;?++j)?{
if(a[k]??a[j])?k?=?j;
}
if(i?!=?k)?{
t?=?a[k];
a[k]?=?a[i];
a[i]?=?t;
}
}
}
int?Find(int?a[],int?n,int?x)?{
int?low?=?0,high?=?n?-?1,mid;
while(low?=?high)?{
mid?=?(low?+?high)/2;
if(x?==?a[mid])?return?mid;
else?if(x??a[mid])?low?=?mid?+?1;
else?high?=?mid?-?1;
}
return?-1;
}
void?Show(int?a[],int?n)?{
int?i;
for(i?=?0;?i??n;?++i)?{
printf("%d?",a[i]);
}
printf("\n");
}
int?main()?{
int?a[20],i,x,res;
srand((unsigned)time(NULL));
for(i?=?0;?i??N;?++i)?
a[i]?=?rand()%N;?//?每個(gè)數(shù)都在1?--?100之間?
Show(a,N);
Sort(a,N);
Show(a,N);
x?=?rand()%100?+?1;
res?=?Find(a,N,x);
if(res?=?0)?printf("數(shù)值%d的下標(biāo)為%d。\n",a[res],res);
else?printf("數(shù)列中沒(méi)有找到數(shù)值%d。\n",x);
return?0;
}
//參考代碼如下:
#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}; //測(cè)試數(shù)組
printf("請(qǐng)輸出一個(gè)整數(shù):\n");
scanf("%d", n);
i = (int)15/2; //對(duì)折位移量
j = (int)15/2; //取數(shù)“指針”
while(k2)
{
i = (int)i/2;
if(i == 0) k++; //i==0 即折半到無(wú)可再折時(shí),仍有最后一次比較,故以k做計(jì)數(shù)
//若未相等,計(jì)算下一循環(huán)指針的位置
if(nnum[j])
j = j + (i + 1);
else if(nnum[j])
j = j - (i + 1);
else
{
isFound = 1;
break; //若找到相等數(shù),標(biāo)記已找到并退出循環(huán)
}
}
//輸出結(jié)果
if(isFound)
printf("該數(shù)是數(shù)組中第%d個(gè)元素的值\n", j);
else
printf("查無(wú)此數(shù)!\n");
return 0;
}
本文標(biāo)題:c語(yǔ)言折中查找函數(shù)運(yùn)用,c語(yǔ)言折半查找算法
轉(zhuǎn)載源于:http://muchs.cn/article10/hcpdgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、網(wǎng)站制作、網(wǎng)站建設(shè)、App設(shè)計(jì)、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容