折半查找:当数组元素有序时,利用折半查找,时间复杂度为O(logN)。利用双指针,一个指向起点(left),一个指向终点(right)。定义mid等于(left+right)/2,向下取整(也可以向上,算法实现是一样的,但是做成二叉树的时候不一样,注意区分)。若mid的值等于要查找的值key则直接返回mid,若mid的值小于key则left=mid+1,否则right=mid-1。一直重复上面操作,直至找到目标。
算法实现如下:
#include <stdio.h>
typedef struct{
int nums[20];
int length;
}Nums,*PNums;
int search(PNums,int);
int main(){
Nums numbers = {
{0},0};
printf("请输入数字,不超过20个,输入-1表示结束:\n");
int temp = 0,key = -1;
while(1){
scanf("%d",&temp);
if(temp == -1||numbers.length == 20){
break;
}
numbers.nums[numbers.length++] = temp;
}//这里的输入大家可以换成自己的测试用例
printf("请输入需要查找的数字:");
scanf("%d",&key);
int result = search