c語(yǔ)言折中查找函數(shù)運(yùn)用,c語(yǔ)言折半查找算法

幫我寫(xiě)下C語(yǔ)言折中查找的主函數(shù)

主函數(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;

}

然后就可以用了!

c語(yǔ)言的折中查找法的算法

#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);

}

c語(yǔ)言中的折半查找法是什么原理?

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

C語(yǔ)言查找的用法

#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;

}

c語(yǔ)言編程實(shí)現(xiàn)“折半查找”的過(guò)程。

//參考代碼如下:

#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)

成都定制網(wǎng)站建設(shè)