【问题标题】:How to Develop algorithms for linear search and binary search using Pseudo code.?如何使用伪代码开发线性搜索和二分搜索算法。?
【发布时间】:2021-05-13 04:41:52
【问题描述】:

在数组/列表上搜索是在数组上找到给定的元素,并返回是否找到,如果找到则返回其位置。线性搜索和二分搜索是两种流行的数组搜索算法。

  • 定义什么是算法并概述一个好的特征 算法。开发线性搜索和二分搜索算法 使用伪代码。

【问题讨论】:

    标签: arrays list binary-search linear-search


    【解决方案1】:

    算法:-算法是一个循序渐进的过程,它定义了一组指令以一定的顺序执行以获得所需的输出。

    1. 线性搜索只是遍历整个数组并搜索它。
    2. 二分查找是分治整个数组,然后在里面搜索,但主要条件是数组需要排序。

    线性搜索:-

    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】:

      算法

      算法程序是为了解决问题而遵循的一系列规则。它通常用于处理、计算和替代连接的计算机和数学运算。

      优秀算法的特征。

      1. 有限性:算法应该终止无限数量的步骤,并且每个步骤都必须在有限的时间内完成。
      2. 输入:算法必须有零个或多个,但输入的数量必须是有限的。
      3. 输出:算法必须至少有一个理想的结果。
      4. 有效性:算法应该有效意味着每个步骤都应该被称为原则,并且应该在有限的时间内执行。
      5. 明确:算法应该清晰明确。它的每一个步骤,以及它们的输入/输出都应该是明确的,并且必须只导致一个含义。
      6. 有限性:算法必须在有限步数后终止。

      线性搜索

      线性搜索是一种非常基本和简单的搜索算法。在线性搜索中,我们通过从头开始遍历数组来搜索给定数组中的元素或值,直到找到所需的元素或值。 线性搜索的伪代码

      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
      

      【讨论】:

        猜你喜欢
        • 2015-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多