典型算法:
算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的。
基本思想:假设数据是按升序排序的,对于给定值n,从序列的中间位置mid开始比较,
如果当前位置arr[mid]值等于n,则查找成功;
若n小于当前位置值arr[mid],则在数列的前半段中查找,arr[left,mid-1];
若n大于当前位置值arr[mid],则在数列的后半段中继续查找arr[left+1,right],
代码思路
以函数形式进行,在一个数组中寻找一个数是第几个,二分法进行每次取一半进行比较。
1.可以采用while循环while (left < right),当左边的数大于右边的数时,循环停止(因为在循环中最右边的数会被中间数减一赋值或者最左边的数会被中间数加一赋值)。
2.if (n < arr[mid])
{
right = mid - 1;
}
else if (n>arr[mid])
{
left = mid + 1;
}
这两个代码将输入的n与数组中间的数进行比较然后再为下一次比较做准备
3.else
{
printf("找到了是: %d\n", mid);
break;
}
}
if (left > right)
{
printf("找不到了");
}
找到n或者未找到n的输出形式
注:2 3 都是在while循环内进行
void Er_fen(int arr[], int sz,int n)
{
int left = 0;
int right = sz - 1;
while (left < right)//左边的数大于右边的数循环终止
{
int mid = (left + right) / 2;//int型 求出的是整数,不是小数
//要找的数在中点左边
if (n < arr[mid])
{
right = mid - 1;
}
//要找的数在中点右边
else if (n>arr[mid])
{
left = mid + 1;
}
//否则找到了,直接跳出
else
{
printf("找到了是: %d\n", mid);
break;
}
}
if (left > right)
{
printf("找不到了");
}
}
本文介绍了二分法查找算法,适用于大规模有序数据。当给定值n时,算法通过不断比较中间元素来缩小搜索范围。在循环中,如果n小于中间元素,搜索左半部分;反之,搜索右半部分。最终找到n的位置或确认找不到n。代码示例展示了如何在一个已排序数组中使用二分法查找特定数值的索引。
5794

被折叠的 条评论
为什么被折叠?



