二分查找
二分查找是一种在有序数组查找元素的算法,可以使我们在O(logN)的时间内完成查询,是一种非常高效的算法。
二分查找:
1 int BinarySearch(int Low, int High, int Key) {
2 int Mid;
3 while(High - Low > 1) {
4 Mid = (High - Low >> 1) + Low;
5 if(A[Mid] <= Key) Low = Mid;
6 else High = Mid;
7 }
8 return A[Low] == Key ? Low : -1;
9 }
"Mid = (High - Low >> 1) + Low"这句话化简后就为(Low + High) / 2,,但这样可以防止溢出。
用二分查找法找寻上届:
1 int UpperBound(int Low, int High, int Key) {
2 int Mid;
3 while(High - Low > 1)
4 {
5 Mid = (High - Low >> 1) + Low;
6 if(A[Mid] <= Key) Low = Mid;
7 else High = Mid;
8 }
9 return Low;
10 }
用二分查找法找寻下届:
1 int LowerBound(int Low, int High, int Key) {
2 int Mid;
3 while(High - Low > 1)
4 {
5 Mid = (High - Low >> 1) + Low;
6 if(A[Mid] >= Key) High = Mid;
7 else Low = Mid;
8 }
9 return High;
10 }
这三个函数都有对应的STL函数。
缺陷:必须是有序的数组,且数组的插入操作效率为O(N)。
--你要是真像那些拼了命努力的人一样努力,你就会明白努力本事就是一件非常人所能做到的事