二分查找c语言表述怎么写
鱼油们,我最近学了二分查找的概念,不过不会用c语言写出来,可不可以帮帮忙 #include <stdio.h>// 二分查找
int binarySearch(int arr[], size_t n, int elem) {
int L = 0, R = n - 1, m; // L 和 R 为左右边界,m 为中间位置
while (L <= R) {
m = (L + R) >> 1;
if (arr < elem) {
L = m + 1;
}
else if (arr > elem) {
R = m - 1;
}
else {
return m;
}
}
return -1;
}
int main() {
int arr[] = { 13, 5, 24, 86, 14, 55, 63, 70, 1, 32 };
size_t n = sizeof(arr) / sizeof(int); // 数组长度
int x = 63;
printf("%d 在数组里的第 %d 位置", x, binarySearch(arr, n, x));
return 0;
}63 在数组里的第 6 位置 傻眼貓咪 发表于 2022-4-18 22:32
先排序,不排序
int arr[] = { 13, 5, 24,14, 86, 55, 63, 70, 1, 32 };
出错 jhq999 发表于 2022-4-18 22:41
先排序,不排序
int arr[] = { 13, 5, 24,14, 86, 55, 63, 70, 1, 32 };
出错
这是查找法,不是排序法,二分查找主要是查找其元素对应的位置,如果排序了,就不是原本的位置了 傻眼貓咪 发表于 2022-4-18 23:16
这是查找法,不是排序法,二分查找主要是查找其元素对应的位置,如果排序了,就不是原本的位置了
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好,占用系统内存较少;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。 本帖最后由 傻眼貓咪 于 2022-4-19 07:59 编辑
jhq999 发表于 2022-4-19 06:42
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好,占用系统内存较少;其缺点是要求待 ...
哈哈,好像也是,认真想,确实不排序如何比较大小?感谢兄弟指教。这么简单的道理,现在才发现,我真是傻了{:10_250:}
真的做多了,往往忽略了最简单,最基本的东西 jhq999 发表于 2022-4-19 06:42
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好,占用系统内存较少;其缺点是要求待 ...
所以二分查找只适用于有序数组查找吧。
页:
[1]