C語(yǔ)言的折半查找法 C語(yǔ)言中的折半查找法是什么
運(yùn)行成功的代碼:
#include <stdio.h>
#include <string.h>
main()
{
char name[10][10],a[10];
int num[10],i,j,min,t,max,mi,mid,x,flag=0;
for(i=0;i<10;i++)
{ printf("輸入職工姓名\n");
scanf("%s",&name[i]);
printf("輸入職工的工號(hào)\n");
scanf("%d",&num[i]);
}
for(i=0;i<=9;i++)
{min=i;
for(j=i;j<10;j++)
if(num[j]<num[min])
min=j;
t=num[i];
num[i]=num[min];
num[min]=t;
strcpy(a,name[i]);
strcpy(name[i],name[min]);
strcpy(name[min],a);
}
for(i=0;i<10;i++)
printf("%s,%d\n",name[i],num[i]);
printf("輸入你所要查找的那個(gè)職工號(hào)\n");
scanf("%d",&x);//scanf用法取地址符
max=9;
mi=0;
mid=(max+mi)/2;
for(i=0;i<=9;i++)//你這兒i=0沒有,那么i在上一個(gè)for循環(huán)后值為9,壓根沒查找
{
if(num[mid]==x)
{flag=1;break;}
if(num[mid]>x)
max=mid,mid=(max+mi)/2;
if (num[mid]<x)
mi=mid,mid=(max+mi)/2;
}
if(flag)
puts(name[mid]);
else if(flag==0)
printf("error");
}
代碼有完善的地方,我只是改了你兩個(gè)錯(cuò)誤。
少個(gè)取地址符,其他沒有錯(cuò)
scanf("%d",&);
C語(yǔ)言中怎樣利用折半查找法(二分查找法)找到數(shù)列中的一個(gè)數(shù)?
根據(jù)需求,用二分法查找指定數(shù)組中的指定數(shù)字,代碼如下:\\x0d\\x0a#include\\x0d\\x0a\/\/在長(zhǎng)度為len的數(shù)組a中尋找n,找到就返回?cái)?shù)組下標(biāo),沒找到就返回-1\\x0d\\x0aintsearch(inta[],intlen,intn)\\x0d\\x0a{\\x0d\\x0aintindex=-1;\\x0d\\x0aintleft=0,right=len,mid=(left+right)\/...
c語(yǔ)言中的折半查找法是什么原理?
剛開始的時(shí)候數(shù)組時(shí)排好順序的:從小到大,或者從大到小。然后將這個(gè)數(shù)組折中,用中間的這個(gè)數(shù)和要查找的數(shù)比較大小,(例如:如果我從小到大,我將數(shù)組這種后,用中間的數(shù)和要查找的數(shù)比較,如果小,則那個(gè)要查找的數(shù)絕對(duì)在中間靠左的范圍里,如果大,則那個(gè)要查找的數(shù)絕對(duì)在中間靠右的范圍里,然后...
用c語(yǔ)言實(shí)現(xiàn)折半查找
42,45,47,49,50,51};int x,i;printf("已有的數(shù)是:\\n");for(i=0;i<20;i++)printf("%d ",a[i]);printf("\\n請(qǐng)輸入要查找的數(shù):");scanf("%d",&x);if((i=find(a,x,0,19))>=0)printf("%d是第%d個(gè)數(shù)\\n",x,i+1);else printf("未找到%d\\n",x);return 0;} ...
c語(yǔ)言先排序后折半查找程序的實(shí)驗(yàn)報(bào)告
首先,定義一個(gè)含有20個(gè)整數(shù)的一維數(shù)組,并通過直接賦值的方式初始化該數(shù)組。接下來,利用冒泡排序算法對(duì)數(shù)組進(jìn)行排序。排序后的數(shù)組將用于后續(xù)的折半查找操作。排序過程如下:for循環(huán)初始化一個(gè)變量s,用于遍歷數(shù)組元素。內(nèi)部嵌套一個(gè)for循環(huán),用于比較和交換數(shù)組元素。如果當(dāng)前元素大于下一個(gè)元素,則交換...
C語(yǔ)言程序編寫——折半查找法
include<stdio.h>int main(){int a[16]={15,14,13,12,11,10,9,8,7,6,5,4,3,1,0}; int l=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; else l=mid+1; }while(l<=r); if(a[mid]==x) print...
c語(yǔ)言折半查找 求助大佬
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...
C語(yǔ)言編程——折半查找法。要求:在有序的序列中查找給定值,最好是調(diào)試...
include <stdio.h>int main(){int a[11]={0,1,2,3,4,5,6,7,8,9,10},min=0,max=10,mid,n; \/\/max為數(shù)列長(zhǎng)度,a[0]作為第一個(gè)數(shù)組元素printf("請(qǐng)輸入您要查找的數(shù):\\n");scanf("%d",&n);while(min<=max){printf("%d-%d\\n",min,max);mid=(min+max)\/2;if (n>a[mid]...
C語(yǔ)言折半查找法哪里出現(xiàn)問題了?
這是由于前面在讀入數(shù)字時(shí),遺留在鍵盤緩沖區(qū)中的回車符引起的。只要把第一個(gè)圖中紅框中的語(yǔ)句修改為:scanf("%c%c",&c,&c);就可以了。這樣第一個(gè)%c就讀掉了上次遺留下的“回車符”,第二個(gè)%c就讀到了Y或N。
c語(yǔ)言折半查找法不知錯(cuò)在哪里,求高手幫助,謝謝
{ if (a[m]==b){ x=x+1;return m;} else return -1;} } } return(i);} 其實(shí)折半查找用遞歸操作最好了,代碼簡(jiǎn)潔一目了然,還有就是判斷好邊界,你寫的這個(gè)折半查找函數(shù)只能用于一處,不具備普遍價(jià)值,最好的這樣的形式 int biSearch(int array[],int m,int n,int value);...
...主體插入排序,查找位置采用折半查找的方法。
教材上有寫:折半插入排序基本思想和直接插入排序一樣,區(qū)別在于尋找插入位置的方法不同,折半插入排序采用折半查找法來尋找插入位置。折半查找法只能對(duì)有序的序列使用。基本思想就是查找插入位置的時(shí)候,把序列分成兩半(選擇一個(gè)中間數(shù)mid),如果帶插入數(shù)據(jù)大于mid則到右半部分序列去在進(jìn)行折半查找;反之...
相關(guān)評(píng)說:
廣州市桁架: ______ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h> intmain() { inta[11]={0,1,2,3,4,5,6,7,8,9,10},min=0,max=10,mid,n; //max為數(shù)列長(zhǎng)度,a[0]作為第一個(gè)數(shù)組元素 printf("請(qǐng)輸入您要查找的數(shù):\n"); scanf("%d",&n); while(...
廣州市桁架: ______ #include#includeusing namespace std;int main(void){ int n; cin >> n; string *str = new string[n+1]; for(int i = 1;i > str[i]; sort(str + 1,str + n + 1); string s; cin >> s; int beg,end,mid; beg = 1,end = n; while(beg s) { end = mid - 1; } else { beg = mid + 1; } } cout
廣州市桁架: ______ 備注:字母也有大小之分. 先說一下算法的基本思想: 在一個(gè)遞增的數(shù)組中,如果要查找的數(shù),比數(shù)組中間的數(shù)小,那么它肯定<中間以后所有的數(shù),所以中間以后的數(shù)不可能有他,就不用查找.前半部分則又是一個(gè)序列,利用樣的思想繼續(xù)分...
廣州市桁架: ______ 前提是有序 序列.排序是比較的字符的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]; ...
廣州市桁架: ______ #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表示表列中沒有這個(gè)數(shù);如果有這個(gè)數(shù),則它...
廣州市桁架: ______ 查找基本算法:折半算法:intSearch_Bin(intdata[],intkey,intlength) { // 在數(shù)組data中折半查找其值等于key的數(shù)據(jù)元素 int low,high,mid; low=0; // 置區(qū)間初值 high=length-1; while(low<=high){ mid=(low+high)/2; if (key==data[mid]) // 找到待查元素 ...
廣州市桁架: ______ 這個(gè)問題并不是C語(yǔ)言,是數(shù)據(jù)結(jié)構(gòu)方面的問題 首先,你要查找的表是有規(guī)定的有序表 表中數(shù)據(jù)元素按關(guān)鍵碼升序或降序排列的表稱為有序表. 折半查找的思路是,在有序表中取中間元素作為比較對(duì)象,若給定值與中間元素的關(guān)鍵碼相等,則查找成功;若給定值小于中間元素的關(guān)鍵碼,則在中間元素的左半?yún)^(qū)繼續(xù)查找;同理,如果找不到在右半部查找.不斷重復(fù)上述的查找過程,直到查找成功,或所查找的區(qū)域無數(shù)據(jù)元素,查找失敗. 如果還是不懂的話,可以查找一下有關(guān)數(shù)據(jù)結(jié)構(gòu)方面的書,會(huì)更加詳細(xì)的解說.
廣州市桁架: ______ 折半法查找只是用于一種情況,就是數(shù)據(jù)是按順序排列的 也就是說數(shù)據(jù)時(shí)排好序的,要不然沒法用這個(gè)辦法查找 算法分三步,一步是判斷要查找的數(shù)是否在這些數(shù)據(jù)當(dāng)中,因?yàn)槭琼樞虻?所以判斷兩端 如果不在,直接break就可以,沒有必要查找了 第二步是判斷是否是兩個(gè)端點(diǎn),要是兩個(gè)端點(diǎn)的一個(gè),那也不用查找了 第三步就是循環(huán)查找,兩個(gè)指針也可以,用數(shù)組下標(biāo)也可以 這樣判斷如ab兩個(gè)指針式只想頭尾,那么判斷第三個(gè)指針,也就是(a+b)/2是否是要找的數(shù)據(jù),是的話跳出循環(huán),不是判斷(a+b)/2和a b的大小,吧中間指針賦值給a或者b,循環(huán)吧 如果a-b==1了還沒有查找到,那么這個(gè)數(shù)就不在這些數(shù)據(jù)當(dāng)中,如果中間指針是要查找的數(shù)據(jù),那么就跳出吧
廣州市桁架: ______ 折半查找需要先排序吧,給你一個(gè)默認(rèn)排過序的查找算法 #include"stdio.h" #define GETDATANUM 15 //輸入數(shù)據(jù)個(gè)數(shù) void main() { int nData_a[GETDATANUM] = {0}; int nTgtData = 0; int nLowIndex = 0; int nUpIndex = GETDATANUM; int ...
廣州市桁架: ______ 把max=m-1和min=m+1分別改為max=m和min=m