采用折半查找对有序表进行查找总比采用顺序查找法对其进行查找要快 T F
时间: 2024-06-05 22:10:43 浏览: 105
T,采用折半查找对有序表进行查找比采用顺序查找法对其进行查找要快。因为折半查找是利用有序表的有序性,在每次查找时将待查找区间折半,然后判断待查找元素在哪一半中,从而将待查找区间缩小一半,这样可以大大减少查找次数,提高查找效率。而顺序查找则需要依次遍历有序表中的每个元素,直到找到待查找元素或遍历完整个表,效率较低。
相关问题
用顺序查找法、折半查找法对查找表进行查找代码、
好的,我可以为你提供用顺序查找法、折半查找法进行查找的代码。
首先是顺序查找法,它的基本思想是逐个比较查找表中的元素,直到找到目标元素或查找完整个表。以下是一个简单的用 C++ 实现的顺序查找函数:
```cpp
int sequentialSearch(int arr[], int n, int target) {
for (int i = 0; i < n; i++) {
if (arr[i] == target) {
return i; // 找到目标元素,返回其下标
}
}
return -1; // 没有找到目标元素,返回 -1
}
```
其中,`arr` 为查找表,`n` 为表中元素的个数,`target` 为要查找的目标元素。
接下来是折半查找法,它的基本思想是利用有序表的有序性,每次将查找区间缩小一半,直到找到目标元素或查找区间为空。以下是一个简单的用 C++ 实现的折半查找函数:
```cpp
int binarySearch(int arr[], int n, int target) {
int left = 0, right = n - 1; // 查找区间为 [left, right]
while (left <= right) {
int mid = (left + right) / 2; // 计算中间位置
if (arr[mid] == target) {
return mid; // 找到目标元素,返回其下标
} else if (arr[mid] < target) {
left = mid + 1; // 目标元素在右半区间,更新左端点
} else {
right = mid - 1; // 目标元素在左半区间,更新右端点
}
}
return -1; // 没有找到目标元素,返回 -1
}
```
其中,`arr` 为有序表,`n` 为表中元素的个数,`target` 为要查找的目标元素。
希望这些代码能够对你有所帮助!如果你还有其他问题,可以继续向我提出。
有序表数据 do,for,if,repeat,while,其查找成功概率分别为0.2,0.15,0.14,0.03,0.01,回答如下问题: 1)画出对该有序表采用顺序查找和折半查找的判定树。 2)分别计算顺序查找时的查找成功和折半查找时的查找成功的平均查找长度。 3)判定折半查找好还是顺序查找好。
好的,我可以回答你的问题。
1)对于该有序表,采用顺序查找和折半查找的判定树如下所示:
顺序查找判定树:
```
┌──[do]───┐
┌──[for]───┐ ├──[if]───┐
[do] [for] [if] [repeat]
| | | |
0.2 0.35 0.49 0.52
```
折半查找判定树:
```
┌──[do]───┐
┌──[for]───┐ ├──[if]───┐
┌──[do] [if] [repeat] [while]
[do] [for] | | |
| | 0.14 0.29 0.43
0.2 0.15
```
2)顺序查找时的查找成功的平均查找长度为:
```
ASLs = 0.2*1 + 0.15*2 + 0.14*3 + 0.03*4 + 0.01*5 = 0.885
```
折半查找时的查找成功的平均查找长度为:
```
ASLb = log2(5)/2 = 0.86
```
其中,ASLs表示顺序查找时的平均查找长度,ASLb表示折半查找时的平均查找长度。
3)通过比较ASLs和ASLb,可以发现折半查找的平均查找长度更小,也就是说折半查找比顺序查找更好。因此,对于该有序表,采用折半查找更为适合。
阅读全文