Ytu oj 折半查詢

2021-09-26 07:33:22 字數 1207 閱讀 6195

有n個數(n<=1000000),這n個數已按從大到小順序存放在乙個陣列中,然後有t次查詢,每次輸入乙個數,要求用折半查詢法找出該數在陣列中第一次出現的位置。如果不在陣列中輸出0。 

第一行陣列元素的個數n

第二行n個陣列元素的值 

第三行輸入查詢次數t (t<=100000)

往下有t行,每行輸入乙個需要查詢的數字

查詢的值在陣列中的位置 

10

10 9 8 7 6 5 4 3 2 129

5

2

6

注意:陣列空間為1000000和100000

這個本來是乙個原來的練習題,當時坑了好久,今天再來回味一下,這個題有很多坑點 

用cin和cout是過不了的

這個題可能有很多的重複數字,仔細看題目要求就可以得到 找到某個數第一次出現的位置,所有你找到這個數不要高興,還得往前找,此外還需要注意迴圈條件  left以查詢 9為例 假如加上等於號

left right mid 

1   10   5

1    5    3

1    3    2    此時a[mid]<=9 ,a[mid]就是 9,right =mid =2;

1    2     1 此時 a[mid]=10>9; left=mid+1;

2    2     2  此時 a[mid]= 9=9; right=mid=2;

2     2     2    .......進入死迴圈 gg

#includeusing namespace std;

const int maxn=1000000+10;

int a[maxn],n,m,x;

int getpos(int x)

if(a[left]==x)

return left;

return 0;

}int main()

;int a[maxn];

int n;

int b_search(int val)

if (a[ans] != val)

return 0;

else

return ans;

}bool cmp(int a, int b)

int main()

return 0;

}

查詢 折半查詢

折半查詢 int search keytype key,int n,keytype k return 1 查詢失敗,返回 1 在演算法中,n表示記錄的個數。key表示要查詢的關鍵字。key為關鍵字順序表,每個元素都是對應記錄的關鍵字。例如key 0 為第0個記錄的關鍵字。如果每條記錄的資訊與它的關鍵...

查詢之折半查詢

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後...

查詢之折半查詢

折半查詢又稱二分查詢,適用有序的順序表。附 筆試考察查詢,這個是經典查詢法 基本思路 首先給定值key與表中中間位置元素的關鍵字,若相等則查詢成功,返回位置。若不等,則所需查詢的元素只能在中間元素外的前半部分或後半部分中。縮小範圍,遞迴查詢。2.折半查詢的 int binary search seq...