0
我有一個排序數組,並希望遞歸地找到插入元素的位置。例如。插入值爲3的數組2,4,5,6,7,8,12,35,算法應該返回3必須插入的位置的索引(索引1)。 下面的代碼有時會起作用,有時候它會陷入無限循環。最終,我的大腦感覺像果凍,我要求你的幫助。這是代碼:遞歸插入通過二進制搜索
private static int insertRec(int[] a, int e, int l, int r) {
int mid = l + r/2;
if (l == r || a[mid] == e) return mid;
if (e > a[mid]) insertRec(a, e, mid + 1, r);
if (e < a[mid]) insertRec(a, e, l, mid - 1);
return -1;
}
編輯現出工作代碼:
private static int insertRec(int[] a, int e, int l, int r) {
int mid = (l + r)/2;
if (l == r || a[mid] == e) return mid;
else if (e > a[mid]) return insertRec(a, e, mid + 1, r);
else if (e < a[mid]) return insertRec(a, e, l, mid - 1);
return -1;
}
你是完全正確的關於這個(我提到我的果凍的大腦?) 但是,這並不是我的問題在整個解決方案。取數組0,0,0,1,2,2,3,5,7,7,並嘗試用我的算法插入3。它會產生-1 – gutenmorgenuhu
@gutenmorgenuhu檢查我的編輯。我沒有完全檢查你的算法,只是顯而易見的部分。 – ale64bit
我感謝你的快速回答。問題是,你的lb算法不使用二分搜索,而是執行線性迭代。 – gutenmorgenuhu