Jak zmodyfikować tę funkcję, aby wyszukiwała i zwracała index ostatniego szukanego elementu w tablicy?
int bsfirst(int arr[], int x, int size){
int left = 0;
int right = size -1;
int mid;
while(right>=left){
mid = (left+right)/2;
if(arr[mid]<x) left=mid +1;
else right=mid-1;
}
if(left<size && arr[left]==x) return left;
return -1;
}
moja propozycja jest taka:
int bslast(int arr[], int x, int size){
int l = 0;
int r = size -1;
int mid;
int i=0;
while(r>=l){
mid = (l+r)/2;
if(arr[mid]>x) r=mid-1;
else l=mid+1;
}
if(r>0 && arr[r]==x) return r;
else return -1;
}
Czy jest to dobre roziwązanie? Właściwie to niejasny jest dla mnnie, czy poprawny jest warunek, w ostatniej instrukcji warunkowej mojej funkcji, że r>0 - o ten mi chodzi: if(r>0 && arr[r]==x) return r;
Czy da się jakoś prościej? Tak, by modyfikacje kodu były jak najmniejsze? Próbowałem zmieniać tylko nierównośći w pętli while i zwracać wartość jako left, ale wtedy to r wskazywał szukany index, a nie left...