陣列 二分查詢演算法

2021-08-04 03:16:47 字數 1179 閱讀 9793

二分查詢演算法

二分查詢演算法也稱為折半查詢法,它的思想是每次都與序列的中間元素比較。二分查詢的乙個前提條件是陣列是有序的,假設陣列array為遞增序列,finddata為要查詢的數,n為陣列長度,首先將n個元素分成個數大致相同的兩半,取array[n/2]與將要查詢的值finddata進行比較,如果相等,則找到了,演算法終止;如果finddata

二分查詢演算法分為遞迴和非遞迴方法解決

示例**:

#include //非遞迴演算法,如果存在返回陣列位置,不存在返回-1

int binarysearch(int array,int len,int finddata)

int start = 0;

int end = len-1;

while(start < end)

else if(array[mid] < finddata)

else

}return -1;

}//遞迴演算法

int binarysearchrecursion(int array,int finddata,int start,int end)

int mid = start + (end - start) / 2;

if(array[mid] == finddata)

else if(finddata < array[mid])

else }

int binarysearchrecursion(int array,int len,int finddata)

binarysearchrecursion(array,finddata,0,len-1);

}int main()

; int len = sizeof(array) / sizeof(array[0]);

int index = binarysearch(array,len,4);

int index2 = binarysearchrecursion(array,len,9);

printf("%d\n%d\n",index,index2);

return 0;

}

演算法 二分查詢 (陣列)

我們把符合下列屬性的陣列 a 稱作山脈 a.length 3 存在 0 i a.length 1 使得a 0 a 1 a i 1 a i a i 1 a a.length 1 給定乙個確定為山脈的陣列,返回任何滿足 a 0 a 1 a i 1 a i a i 1 a a.length 1 的 i 的...

bisect 陣列二分查詢演算法

這個模組對有序列表提供了支援,使得他們可以在插入新資料仍然保持有序。對於長列表,如果其包含元素的比較操作十分昂貴的話,這可以是對更常見方法的改進。這個模組叫做 bisect 因為其使用了基本的二分 bisection 演算法。源 也可以作為很棒的演算法示例 邊界判斷也做好啦!定義了以下函式 bise...

bisect 陣列二分查詢演算法

bisect.bisect left a,x,lo 0,hi len a 如果 x 已經在 a 裡存在,那麼插入點會在已存在元素之前 也就是左邊 如果 a 是列表 list 的話,返回值是可以被放在 list.insert 的第乙個引數的 返回的插入點 索引 i 可以將陣列 a 分成兩部分。左側是 ...