数据结构之折半查找

折半查找的算法思想:

折半查找又称二分查找,它仅仅适用于有序的顺表。

折半查找的基本思想:首先将给定值key与表中中间位置的元素(mid的指向元素)比较。mid=low+high/2(向下取整)

  1. 若key与中间元素相等,则查找成功,返回该元素的存储位置,即mid;
  2. 若key与中间元素不相等,则所需查找的元素只能在中间元素以外的前半部分或后半部分。(至于是前半部分还是后半部分要看key与mid所指向元素的大小关系)
    a.在查找表升序排列的情况下,若给定值key大于中间元素则所查找的元素只可能在后半部分。此时让low=mid+1;
    b.若给定值key小于中间元素则所查找的元素只可能在前半部分。此时让high=mid-1;
cpp 复制代码
#include<stdio.h>
//折半查找   主要方法
int Binary_search(int *array,int length,int key){
	int low=1,high=length,mid;  //如果不浪费空间  则low=0;high=length-1 
	while(low<=high){  //退出循环条件为low>high

		mid=(low+high)/2;
		if(array[mid] == key) return mid;
		else if(array[mid]>key) high=mid-1;
		else low = mid+1;
		
	}
	return -1;
}

int main(){
	
	int a[16]={0},key,temp;//浪费一个空间即下标0   用于对齐 下标 
	printf("请输入15个有序数字:\n"); 
	for(int i=1;i<=15;i++)
	scanf("%d",&a[i]);
	
	printf("请输入所要查找的数字:\n"); 
	scanf("%d",&key);
	
	temp=Binary_search(a,15,key);
	
	if(temp==-1)
		printf("不存在\n"); 
		
	else
	 printf("下标为%d\n",temp); 	 
	
	return 0;

}
相关推荐
一只小小的芙厨9 分钟前
基础数论总结
笔记·学习·算法
动词ing35 分钟前
【C语言】结构体+文件基础
c语言·开发语言·数据结构
caimouse1 小时前
ReactOS 窗口系统分析(7):分层窗口与绘制辅助 — layered.c + draw.c
c语言·开发语言
夜不会漫长2 小时前
C++入门(1)
开发语言·c++·算法
wen_zhufeng2 小时前
IndexTTS 2.5 技术报告
人工智能·算法·机器学习
大熊背3 小时前
树莓派相机自动白平衡详解(四)
算法·树莓派·白平衡·isppipeline
一米阳光86613 小时前
软考(中级)软件设计师核心笔记(9)算法——背包问题
笔记·算法·职场发展·软考·软件设计师·中级职称
晚风醉蝶3 小时前
1-11-奇偶排序-OddEvenSort
java·数据结构·算法
旖旎夜光3 小时前
LeetCode 852:山脉数组的峰顶索引(二分查找) —— 题解
数据结构·c++·算法·leetcode·二分查找
..Dauntless..3 小时前
【C++】继承——基类和派生类的配合
开发语言·c++·算法