www.sghz.net > C语言简单实现折半查找法

C语言简单实现折半查找法

int binary_search(int * data,int len,int target) { int high=len-1,low=0,mid; mid=(high+low)/2; while(high>low) { if(target>data[mid]) low=mid+1; else if(target<data[mid]) high=mid-1; else return mid; mid=(high+low)/2; } return -1; } int main() { int a[]={0,1,2,

#include <stdio.h>int BinFind(int a[],int n,int num) { int mid,start = 0; int end = n - 1; while(start <= end) { mid = (start + end)/2; if(a[mid] == num) return mid + 1; else if(a[mid] > num) start = mid + 1; else end = mid - 1; } return 0;}int main() { int a[] = {15,

// VC运行//函数10 void f10() { int i,j,n=15,m=0; float a[15],k; printf("此函数为: 将15数从小到大的顺序输入到一个数组中.\n输入任意一个数,用折半查找法(折半之后再查找)找到在该数组中的位置.\n若不在输出“不在数组中”\n");

#include<stdio.h> int find(int a[],int l,int r,int x) {int i,j,m; if(l>r)return -1; i=l;j=r;m=(i+j)/2; if(a[m]==x)return m; else if(a[m]<x)return find(a,m+1,r,x); else return find(a,l,m-1,x); } int main () {int n,i,x; scanf("%d",&n); int a[n]; for(i=0;i<n;i++) scanf("%d%*c

折半,故名思意,把拍好的数组不停地分成一半查找 例如你说有15个数 (1)取中间一个数a[6](要是数组是偶数,就取左边一个)和目标数比较 (2)要是比较结果为目标数大(表明要找的数就在a[7]~a[14]里或没有),就在a[7]~a[14]之间取中间数a[10],和目标数比较(3)不停地比,直到找到目标数,返回下标.

我这里有typedef int ElemType;//二分法查找const ElemType* myFind(const ElemType* a,int n,const ElemType& e) { const ElemType* front=a,*rear=a+n-1,*mid; while(rear>=front) { mid=front+(rear-front)/2; if(e== *mid) return mid; else if(e>*

\* 没找到;please enter the number; printf("%d"input 15 numbers;=end; printf("%d&quot,start; return;%d"start< for(i=0;x) return f(a,int x;);n"end) return -1,end=14,end);; if(a[i]==x) return i,start,i;i&lt,&x); else start=i+1; } else if (x&gt: #

折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务.例如排序后的数据是1 5 12 35 64 78 89 123 456 你要查找12,首先用12跟上面排好顺序的9个数中间那个比较(64),12折半查找的目的是提高查找的效率!

#include<stdio.h>#include<string.h> void main() { char name[10][9]={"华","英","萍","涛","丽","强","军","斌","伟","亚"}; int score[10]={75,87,68,92,88,61,77,96,80,72}; printf("排序结果:\n"); for(int i=

if(x=a[i])/*应该是x==a[i]吧*/用递归实现,程序会很好理解intf(inta[],intx,intstart,intend){inti=start+(end-start)/2;if(start>end)return-1;/*没找到,返回-1*/if(a[i]==x)returni;elseif(a[i]>x)returnf(a,x,i+1,end);elsereturnf(a,x,start,i-1);}----------------------------------

网站地图

All rights reserved Powered by www.sghz.net

copyright ©right 2010-2021。
www.sghz.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com