今天做了一道題,矩陣上的二分查詢,居然做錯了。是考慮簡單了。一維上的演算法擴充套件到二維的時候,需要仔細分析矩陣中的資料的相互聯絡,然後調整演算法。
前些時候,樹狀陣列那篇部落格。在擴充套件到二維後,求子矩陣的區間和,就沒有考慮清楚誰減去誰。這次二分查詢擴充套件到二維後,也沒有考慮清楚比arr[x][y]大的資料元素都可能在哪些區域。
下面是**,還可以優化,有些空間重複搜尋了。
#includeusing namespace std;
int arr[110][110];
struct position;
position * search(int sea,int m,int n,int p,int q)
int x,y;
y=(p+m)/2;
x=(q+n)/2;
if(arr[y][x]==sea)
if(arr[y][x]>sea)
if(arr[y][x]x >= 0)
return ans;
return search(sea,m,n,y+1,q); //search(sea,m,x,y+1,q);就應該和 search(sea,m,n,p,x+1); 沒有重複的了 }
}int main()
} position * ans;
int s;
while(scanf("%d",&s)==1){
ans=search(s,10,10,0,0);
cout 基本思想 在乙個查詢區間中,確定出查詢區間的中心位置,用待查詢資料元素的關鍵字和中心位置上資料元素的關鍵字比較,若兩者相等則查詢成功 否則若前者小於後者,則把區間定為原查詢區間的前半段,繼續這樣的過程 否則若前者大於後者,則把查詢的區間定為原查詢區間的後半段,繼續這樣的過程.這樣的查詢過程一直進行到... 在寫這篇文章之前,已經寫過了幾篇關於改迭代二分查詢主題的文章,想要了解的朋友可以去翻一下之前的文章 bentley在他的著作 writing correct programs 中寫道,90 的計算機專家不能在2小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過... 資料的查詢在計算機的操作中非常常見,那麼我們應該怎樣在計算機中實現查詢操作呢?最簡單的一種方法 傻找 也就是乙個乙個的找,我們把陣列中的每個元素都和我們想要查詢的目標元素進行比對,看一下列表中是否有和這個元素相同的元素,如果我們想要尋找的那個目標元素在列表 現了,那麼就宣告查詢成功,這種演算法寫成 ...有序表上的二分查詢
迭代二分查詢二分查詢
二分查詢的平均查詢長度 二分查詢