算法伪代码

问题描述

我有代码

Algorithm exists(A,n,x):
     lo=0
     hi=n-1
     while hi>=lo:
        mid=floor((hi+lo)/2):
        if x>A[mid]: 
          lo=mid+1
        else: if x<A[mid]:
           hi=mid-1
        else:
           return True
     return False

和数组: A[0]=1,A[1]=5,A[2]=6,A[3]=10,A[4]=12,A[5]=16,A[6]=17,A[7]=43

然后我必须找到存在的(A,4,17)返回。

然后我们有l0=0hi=n-1=4-1=3,然后是hi>l0

我们得到了mid=floor((hi+lo)/2)=floor((3+0)/2)=1(底数是否舍入为1?)。

我们看到x<A[1]是因为4<5。然后我认为伪代码返回:hi=mid-1=1-1=0

解决方法

您编写的代码,它是二进制搜索伪代码。通过二进制搜索,您可以在排序的数组中搜索数字。

在您的代码中,您的解释是错误的。让我解释一下原因。

您的数组:TransactionCheckRequirementsIntent() { this.$googleAction.$transaction.checkRequirements({ requestDeliveryAddress: false,},{ actionProvidedOptions: { "paymentType": "PAYMENT_CARD","displayName": "VISA-1234" },}) this.ask('Check requirements'); } A[0]=1A[1]=5A[2]=6A[3]=10A[4]=12A[5]=16,{{ 1}}

然后,根据您的算法,您想找到A[6]=17

A[7]=43exists(A,4,17)A resembles your array

因此,据此,您在最后一行中的解释是错误的,因为在第一次迭代之后,n=4然后它将执行x=17条件,因为

mid=1