二分查詢演算法
二分查詢演算法也稱為折半查詢法,它的思想是每次都與序列的中間元素比較。二分查詢的乙個前提條件是陣列是有序的,假設陣列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 分成兩部分。左側是 ...