如何使用伪代码开发线性搜索和二分搜索算法。?

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

【讨论】:

以上是关于如何使用伪代码开发线性搜索和二分搜索算法。?的主要内容,如果未能解决你的问题,请参考以下文章

Python算法-冒泡排序、线性和二分搜索

算法之二分查找PK线性查找

O(1) 和 O(n) 之间的线性搜索差异

常见搜索算法:二分查找

Task 04:数组二分查找

二分搜索算法