【发布时间】:2021-05-13 04:41:52
【问题描述】:
在数组/列表上搜索是在数组上找到给定的元素,并返回是否找到,如果找到则返回其位置。线性搜索和二分搜索是两种流行的数组搜索算法。
- 定义什么是算法并概述一个好的特征 算法。开发线性搜索和二分搜索算法 使用伪代码。
【问题讨论】:
标签: arrays list binary-search linear-search
在数组/列表上搜索是在数组上找到给定的元素,并返回是否找到,如果找到则返回其位置。线性搜索和二分搜索是两种流行的数组搜索算法。
【问题讨论】:
标签: arrays list binary-search linear-search
算法:-算法是一个循序渐进的过程,它定义了一组指令以一定的顺序执行以获得所需的输出。
线性搜索:-
int arr[5] = {5, 3, 2, 6, 10};
int target = 6; // key to find in array
int result = -1;
for (int i = 0 ; i < 5; i++) {
if (arr[i] == target) {
result = i;
break;
}
}
cout << result << endl; // here is your result;
优化的线性搜索:- 我们可以以一种更优化的方式执行线性搜索,但需要更多空间 为上面的示例创建一个大小比给定数组大 1 的数组,让它为 6 // 然后在同一个数组中获取用户的输入,并在该数组的最后一个索引处添加键
int n;
cin >> n;
int arr[n+1];
for (int i = 0 ; i < n; i++){
cin >> arr[i];
}
int target;
cin >> target;
arr[n] = target; // adding target
int result = -1;
int i = 0;
while(arr[i] != target){
result = i;
i++;
}
if (result == n){
result = -1;
}
在上面的算法中,如果总是在循环中,我们不需要添加,我们只需要在结束时检查它。
二分搜索:-
// Binary Search
int left = 0;
int right = arr.length() -1;
while(left <= right){
int mid = left + ((right - left) / 2);
if (arr[mid] == target){
result = mid;
break;
} else (arr[mid] > target){
right = mid - 1;
} else {
left = mid + 1;
}
}
带递归的二分搜索:-
int binarySearch(int arr[], int left, int right, int target) {
if (right >= left) {
int mid = left + (right - left) / 2;
if (arr[mid] == target)
return mid;
if (arr[mid] > target)
return binarySearch(arr, left, mid - 1, target);
return binarySearch(arr, mid + 1, right, target);
}
return -1; // didn't found the element
}
【讨论】:
算法
算法程序是为了解决问题而遵循的一系列规则。它通常用于处理、计算和替代连接的计算机和数学运算。
优秀算法的特征。
线性搜索
线性搜索是一种非常基本和简单的搜索算法。在线性搜索中,我们通过从头开始遍历数组来搜索给定数组中的元素或值,直到找到所需的元素或值。 线性搜索的伪代码
Read size,array[size], search from user
i=0
While i<size
IF
search==array[i]
write i
break;
Else
i++
Endif
Endwhile
二分搜索
二分搜索是最流行的搜索算法。它是高效的,也是用于解决问题的最常用技术之一。
二分搜索的伪代码
Procedure binary search
a← sorted array
b← size of array
c← value to be searched
Set lowerBound = 1
Set upperBound = b
while c not found
if upperBound < lowerBound
EXIT: c does not exists.
set midPoint = lowerBound + ( upperBound - lowerBound ) / 2
if a[midPoint] < c
set lowerBound = midPoint + 1
if a[midPoint] > c
set upperBound = midPoint - 1
if a[midPoint] = c
EXIT: c found at location midPoint
end while
end procedure
【讨论】: