二分查找法(折半查找)

#include <stdio.h>

int binary_search(int arr[],int key,int left,int right)//定義並聲明一個二分查找函數
{
int mid;
while (left <= right)
{
mid = left + (right - left) / 2;
if (arr[mid] < key)//當arr[mid]小於要查找的數時
{
left = mid + 1;//左側加1
}
else if (arr[mid] > key)//當zrr[mid]大於要查找的數時
{
right = mid - 1;//右側減一
}
else//當left等於right時
{
break;//跳出while循環
}
}
if (left <= right)//跳出循環即left等於right,如果此時left小於等於right即爲找到
{
return mid;
}
else
{
return -1;//否則即爲數組中沒有該數字
}
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int key;
printf(“請輸入要查找的數字:–>”);
scanf("%d", &key);//定義key爲要查找的數字
int left = 0;
int sz = sizeof(arr) / sizeof(arr[0]) - 1;
int ret = 0;
ret = binary_search(arr, key, 0, sz);
if (ret == -1)
{
printf(“找不到,數組中沒有%d這個數\n”,key);
}
else
{
printf(“找到了\n%d的下標是:%d\n”,key, ret);
}
return 0;
}

二分査找也稱折半査找,其優點是查找速度快,缺點是要求所要査找的數據必須是有序序列。該算法的基本思想是將所要査找的序列的中間位置的數據與所要査找的元素進行比較,如果相等,則表示査找成功,否則將以該位置爲基準將所要査找的序列分爲左右兩部分。接下來根據所要査找序列的升降序規律及中間元素與所查找元素的大小關係,來選擇所要査找元素可能存在的那部分序列,對其採用同樣的方法進行査找,直至能夠確定所要查找的元素是否存在

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章