回覆列表
  • 1 # 使用者8852944140293

    折半法

    應該叫做2分法。

    用2分法查詢數

    需要先對陣列進行排序(升序或降序)

    假如你所要查詢的數是20

    陣列是 1 4 7 8 20 30 34

    每次都拿中間的數跟你要比的數比

    也就是 8和20比

    發現20比8大

    所以左面的數都不要了

    剩下的是 20 30 34

    再拿20跟30比

    發現20比30小

    右面的數都不要了

    再拿20跟20比

    相等,則找到了。

    如果找不到返回-1

    下面是程式。

    #include

    using namespace std;

    int binarySearch(int* data,int low,int high,int value)

    {

    int k=(low+high)/2;

    if(value*(data+high))

    {

    return -1;

    }

    if(value

    {

    return binarySearch(data,low,k-1,value);

    }

    else if(value>*(data+k))

    {

    return binarySearch(data,k+1,high,value);

    }

    else

    return k;

    }

    void main()

    {

    int pos;

    int arr1[9]={1,2,3,4,5,6,7,8,9};

    int i=9;

    while(i)

    {

    pos=binarySearch(arr1,0,8,i);

    cout

    i--;

    }

    pos=binarySearch(arr1,0,8,20);

    cout

    }

  • 中秋節和大豐收的關聯?
  • 吃的少,飲食結構沒有變化,運動,兩個月胖了六斤,為什麼?