Algorithm 二分查詢

2021-09-06 17:47:30 字數 2301 閱讀 5259

今天在學習《程式設計之美》的時候,看到乙個二分查詢的題目,發現原來我真的不懂二分查詢。

二分查詢時候注意的事項:

在求二分查詢的中間點時沒有使用

midindex = (minindex + maxindex) / 2

是因為,以免 minindex + maxindex之後會導致溢位而出現錯誤。

注意迴圈的迴圈終止條件及邊界元素的判定。

下面把牛人做的該題部分的擴充套件(c++)拿來展示一下,以供學習:

#include #include 

#include

#include

using

namespace

std;

/*//1: 給定乙個有序(不降序)陣列arr,求最大的i使得arr[i]等於v,不存在則返回-1

int bisearch(char arr[10], int begin, int end, char *v)

//從最大索引開始判斷

if(!strcmp(arr[maxindex], v))

return maxindex;

else if(!strcmp(arr[minindex], v))

return minindex;

else

return -1;}*/

/*//2: 乙個有序(不降序)陣列arr,求任意乙個i使得arr[i]等於v,不存在則返回-1

int bisearch(char (*arr)[10], int begin, int end, char *v)

cout << "minindex = " << minindex << " maxindex = " << maxindex << endl;

if(!strcmp(*(arr + minindex), v))

return minindex;

return -1;}*/

/*//3:給定乙個有序(不降序)陣列arr,求最小的i使得arr[i]等於v,不存在則返回-1

int bisearch(char (*arr)[10], int begin, int end, char *v)

cout << "minindex = " << minindex << " maxindex = " << maxindex << endl;

//從最小數開始判斷

if(!strcmp(*(arr + minindex), v))

return minindex;

else if(!strcmp(*(arr + maxindex), v))

return maxindex;

else

return -1;}*/

/*//4:給定乙個有序(不降序)陣列arr,求最大的i使得arr[i]小於v,不存在則返回-1

int bisearch(char (*arr)[10], int begin, int end, char *v)

//從最大數開始判斷

if(strcmp(*(arr + maxindex), v) < 0)

return maxindex;

else if(strcmp(*(arr + minindex), v) < 0)

return minindex;

else

return -1;}*/

//5; 給定乙個有序(不降序)陣列arr,求最小的i使得arr[i]大於v,不存在則返回-1

int bisearch(char (*arr)[10], int begin, int end, char *v)

//從小數開始判斷

if(strcmp(*(arr + minindex), v) > 0

)

return

minindex;

else

if(strcmp(*(arr + maxindex), v) > 0

)

return

maxindex;

else

return -1;}

intmain()

;

char v = "

dddd";

int last = sizeof(a) / (sizeof(char) * 10

);

int index = bisearch(a, 0, last-1

, v);

printf(

"index of v is %d\n

", index);

return0;

}

參考資料

[1]

在algorithm中的二分查詢

首先寫algorithm的標頭檔案 lower bound upper bound binary search 從小到大 函式lower bound 在first和last中的前閉後開區間進行二分查詢,返回大於或等於val的第乙個元素位置。如果所有元素都小於val,則返回last的位置,且last的...

迭代二分查詢二分查詢

在寫這篇文章之前,已經寫過了幾篇關於改迭代二分查詢主題的文章,想要了解的朋友可以去翻一下之前的文章 bentley在他的著作 writing correct programs 中寫道,90 的計算機專家不能在2小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...

1128 二分 二分查詢

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述nettle最近在玩 艦 因此nettle收集了很多很多的船 這裡我們假設nettle氪了很多金,開了無數個船位 去除掉重複的船之後,還剩下n 1 n 1,000,000 種不同的船。每一艘船有乙個稀有值,任意兩艘船的稀有...