1. 程式人生 > >折半查詢法(基於有序陣列)

折半查詢法(基於有序陣列)

折半查詢的方法優點:
比較次數少,查詢速度快,平均效能好,要求待查表為有序表
儲存結構一定是順序結構
程式碼實現:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[] = { 1, 2, 3, 4, 5 };
int to_find = 4;
int left = 0;
int right = sizeof(arr) / sizeof(arr[0] - 1);
int mid = 0;
while (left <= right) //right最後一個元素的下標寫成<=是因為[left,right]
{ //是閉區間,如果寫成<的話就會導致當left=right時,
mid = (left + right) / 2; //迴圈走不進去,也就失去了一次比較的機會
if (to_find < arr[mid])
{
right = mid - 1; //刨除mid這樣的臨界值
}
else if (to_find>arr[mid])
{
left = mid + 1;
}
else //to_find=arr[mid]
{
break;
}
}
if (left <= right) //找到了
{
printf(“找到了!下標為%d\n”, mid);
}
else
{
printf(“沒找到!\n”);
}
system(“pause”);
return 0;
}
//上面的while迴圈退出的可能有兩種:

//1.while裡面left<=right條件不滿足
//2.找到了元素就break了