?
折半查找的算法思想:
折半查找又稱二分查找,它僅僅適用于有序的順表。
折半查找的基本思想:首先將給定值key與表中中間位置的元素(mid的指向元素)比較。mid=low+high/2(向下取整)
- 若key與中間元素相等,則查找成功,返回該元素的存儲位置,即mid;
- 若key與中間元素不相等,則所需查找的元素只能在中間元素以外的前半部分或后半部分。(至于是前半部分還是后半部分要看key與mid所指向元素的大小關系)
a.在查找表升序排列的情況下,若給定值key大于中間元素則所查找的元素只可能在后半部分。此時讓low=mid+1;
b.若給定值key小于中間元素則所查找的元素只可能在前半部分。此時讓high=mid-1;
#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>highmid=(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"); elseprintf("下標為%d\n",temp); return 0;}