首页 > 代码库 > #查找算法#【1】简单查找:顺序、折半查找
#查找算法#【1】简单查找:顺序、折半查找
•顺序查找
从线性表的一端开始,依次将每个记录的关键字与给定值进行比较,若某个记录的关键字等于给定值,表示查找成功,返回记录序号;若将线性表中所有记录都比较完,仍未找到关键字与给定值相等的记录,则表示查找失败,返回一个失败值。
•折半查找
又称为二分查找。这种查找方法要求查找表的数据是线性结构保存,并且还要求查找表中的数据是按关键字由小到大有序排列。
顺序查找比较简单,依次用数组中的每个元素和要查找的元素进行对比即可。不再贴代码说明
折半查找是一种递归过程,每折半一次,可使查找范围缩小一半,当查找范围缩小到只剩一个元素,而该元素还不是要找的元素,则查找失败。
折半查找说明如下图:
折半查找代码如下:
1 #include <stdio.h> 2 #define LENGTH 10 3 int source[LENGTH] = {10,12,28,37,54,65,69,86,90,98}; 4 5 //二分查找,查找key在原始数据a中的位置 6 int BinarySearch(int a[],int n,int key){ 7 int low,high,mid; 8 9 low = 0;10 high = n-1;11 12 while(low<=high){13 mid = (low + high)/2; //每次让中间数取最小和最大的中间14 if(a[mid] == key) //查找的元素正好等于中间值15 return mid;16 else if(key < a[mid]) //查找的元素小于中间值,在最小值和上次中间值范围内查找17 high = mid - 1;18 else19 low = mid + 1; //查找的元素大于中间值,在中间值和最大值范围查找20 }21 22 return -1;23 }24 25 int main(){26 int i,key,pos;27 printf("原始数据:\n");28 29 for(i = 0 ; i < LENGTH ; i++)30 printf("%d ",source[i]);31 32 printf("\n请输入要查找的数据:");33 scanf("%d",&key);34 35 pos = BinarySearch(source,LENGTH,key);36 37 if(pos > -1)38 printf("\n查找成功,查找元素位于第 %d 个",pos);39 else40 printf("\n查找失败");41 42 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。