如何使用伪代码开发线性搜索和二分搜索算法。?
Posted
技术标签:
【中文标题】如何使用伪代码开发线性搜索和二分搜索算法。?【英文标题】:How to Develop algorithms for linear search and binary search using Pseudo code.? 【发布时间】:2021-05-13 04:41:52 【问题描述】:在数组/列表上搜索是在数组上找到给定的元素,并返回是否找到,如果找到则返回其位置。线性搜索和二分搜索是两种流行的数组搜索算法。
定义什么是算法并概述一个好的特征 算法。开发线性搜索和二分搜索算法 使用伪代码。【问题讨论】:
【参考方案1】:算法:-算法是一个循序渐进的过程,它定义了一组指令以一定的顺序执行以获得所需的输出。
-
线性搜索只是遍历整个数组并搜索它。
二分查找是分治整个数组,然后在里面搜索,但主要条件是数组需要排序。
线性搜索:-
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
【讨论】:
【参考方案2】:算法
算法程序是为了解决问题而遵循的一系列规则。它通常用于处理、计算和替代连接的计算机和数学运算。
优秀算法的特征。
-
有限性:算法应该终止无限数量的步骤,并且每个步骤都必须在有限的时间内完成。
输入:算法必须有零个或多个,但输入的数量必须是有限的。
输出:算法必须至少有一个理想的结果。
有效性:算法应该有效意味着每个步骤都应该被称为原则,并且应该在有限的时间内执行。
明确:算法应该清晰明确。它的每一个步骤,以及它们的输入/输出都应该是明确的,并且必须只导致一个含义。
有限性:算法必须在有限步数后终止。
线性搜索
线性搜索是一种非常基本和简单的搜索算法。在线性搜索中,我们通过从头开始遍历数组来搜索给定数组中的元素或值,直到找到所需的元素或值。 线性搜索的伪代码
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
【讨论】:
以上是关于如何使用伪代码开发线性搜索和二分搜索算法。?的主要内容,如果未能解决你的问题,请参考以下文章