二分查詢(Binary Search)

2021-10-09 17:26:09 字數 531 閱讀 5390

二分查詢又叫折半查詢,是乙個較高效的演算法,但是,二分查詢要求陣列資料必須採用順序儲存結構有序排列。查詢方法是將陣列分為左子陣列,中間值和右子陣列。將中間值和查詢值對比,如果中間值比查詢值大,進入左子陣列查詢,反之進入右子陣列查詢。

每次查詢捨棄陣列一半的值,假設陣列長度為n,則第一次折半後剩下n/2,第二次折半後剩下n/2/2,…,第k次折半後剩下n/(2^ k),最壞情況下最後一次尋找到查詢值,則n/(2^k)=1,則時間複雜度是o(log2n)(以2為底,n的對數)

public int binarysearch(int nums, int target)

//當nums[mid]else if(nums[mid] < target)

//找到目標值,返回下標

else if(nums[mid] == target)

//更新mid值

mid = left + (right - left)/2;

}//查詢失敗返回-1

return -1;

}

STL中的二分查詢(binary search)

stl中對於有序序列 vector,list等 提供了相當相當強大的二分搜尋binary search演算法。對於可以隨機訪問容器 如vector等 binary search負載度為對數級別 logn 對於非隨機訪問容器 如list 則演算法複雜度為線性。現在簡要介紹一下幾種常用的binary s...

迭代二分查詢二分查詢

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

1128 二分 二分查詢

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