一,问题:
有100万个有序的数据文件,有足够的内存的条件下,如何快速查找出某个数是否存在于该数据文件中?
二,二分搜索算法:
二分搜索算法属于分治算法的一种。它是一种由条件的快速搜索查找算法,其要求被查找的数据序列是有序的,且是确定的。它的思想是:将一个有序数组分为两段,设定被查找的数一定存在于某一段,如果找到不到,继续进行分段,最终得出存在或不存在的结果;
三,算法的C语言实现
//递归实现
int binary_search(const int arr[], int start, int end, int khey)
{
if (start > end)
{
return -1;
}
int mid = start + (end - start) / 2; //直接平均可能会溢位,所以用此算法
if (arr[mid] > khey)
{
return binary_search(arr, start, mid - 1, khey);
}
else if (arr[mid] < khey)
{
return binary_search(arr, mid + 1, end, khey);
}
else
{
return mid;
}
}
//非递归实现
int binary_search(const int arr[], int start, int end