//参考代码如下:
c语言折半查找_c语言折半查找法原理
c语言折半查找_c语言折半查找法原理
#include
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("请输出一个整数:
");
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 j = j + (i + 1); else if(n>num[j]) j = j - (i + 1); else {isFound = 1; break; //若找到相等数,标记已找到并退出循环 }} //输出结果 if(isFound) printf("该数是数组中第%d个元素的值 ", j); else printf("查无此数! "); return 0; } // VC运行 //函数10 void f10() {int i,j,n=15,m=0; float a[15],k; printf("此函数为: 将15数从小到大的顺序输入到一个数组中。n输入任意一个数,用折半查找法(折半之后再查找)找到在该数组中的位置。n若不在输出“不在数组中”n"); printf("请按从小到大依次输入15个数:n"); for(i=0;i<15;i++) scanf("%f",&a[i]); printf("请输入任意一个数:"); scanf("%f",&k); printf("输出为:n"); j=n/2; for(i=1;m==0;i++) {if(ka[n-1]) {m=1; printf("该数不在其数组中n");} else if(j<0||j>(n-1)) {m=1; printf("该数不在其数组中n");} else if(k==a[j]) {m=1;printf("该数为在数组中的第%d元素n",j+1);} else if(k j--; else if(k>a[n/2]) j++; }("pause..."); }不好意思,我的是错的 #include int seek(int pArr,int low,int high,int num); void main() {int Arr[]={1,2,3,4,5,6,7,8,9,10}; int find,num; printf("input a num to be found.n"); scanf("%d",&num); find = seek(Arr,0,9,num); if (find == -1) printf("num=%d not found!n",num); else printf("num has been found!nArr[%d] = %dn",find,Arr[find]); }int seek (int pArr,int low,int high,int num) {//pArr 为数组名,该数组必须是排好序了(这是二分法的要求),这里按从小到大排序 int mid; mid = (low+high)/2; if ((low>=high)&&(pArr[mid]!=num)) return -1; else {if (pArr[mid]==num) return mid; else if (pArr[mid]>num) high = mid+1;//中间数字比要查的数还大,说明可能在中间段以前 else low = mid-1;//同上,可能在中间段以后 return seek(pArr,low,high,num); //递归 }} 刚好,这是我前两天写的。 main(){ int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1}; int k,top,bot,mid; scanf("%d",&k); top=14;bot=0; while(bot<=top){ /注意这里的等于/ mid=(top+bot)/2; printf("bot=%d,top=%d,mid=%d,a[%d]=%dn",bot,top,mid,mid,a[mid]); if(k==a[mid]){ printf("%d",mid); break; }else if(k>a[mid]) top=mid-1; else bot=mid+1; }if(bot>top) printf("no"); getch(); } 刚好,这是我前两天写的。 main(){ int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1}; int k,top,bot,mid; scanf("%d",&k); top=14;bot=0; while(bot<=top){ /注意这里的等于/ mid=(top+bot)/2; printf("bot=%d,top=%d,mid=%d,a[%d]=%dn",bot,top,mid,mid,a[mid]); if(k==a[mid]){ printf("%d",mid); break; }else if(k>a[mid]) top=mid-1; else bot=mid+1; }if(bot>top) printf("no"); getch(); } #include #include int main() {int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,1,0},i,j,put,m,count; scanf("%d",&put); i=14; j=count=0; m=(i+j)/2; for(;j<15;j++) {if(a[j]!=put) count++; }j=0; if(count==15) printf("无此数n"); else {while(put!=a[m]) {if(put>a[m]) {while(put!=a[m]) {if(put>a[m]) {m=(m+j)/2; }else if(put {m=(m+(i+j)/2)/2; }} }if(put {while(put!=a[m]) {if(put==a[i]) {m=i; }else if(put>a[m]) {m=(m+(i+j)/2)/2;C语言程序编写——折半查找法
版权声明:本文内容由互联。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发 836084111@qq.com 邮箱删除。