Zwrócenie wszystkich indexów

0

Witam podpowiedział by mi ktoś jak przekształcić funkcję wyszukiwanie binarne aby ZWRACAŁA ona wszystkie indexy wystąpienia danego elementu w posortowanej tablicy??A oto kod.Napisałem po mojemu więc może zawierać błędy:p

#include<stdio.h>
void sortuj(int tab[],int n);
int szukanie_binarne(int tab[],int n,int x);

int main(void)
{
int tab[40];
int n,i,x;
puts("Podaj ilosc elementow w tablicy\n");
scanf("%d",&n);
puts("Podaj elementy tablicy");
for(i=0;i<n;i++)
{
scanf("%d",&tab[i]);
}
sortuj(tab,n);
for(i=0;i<n;i++)
{
printf("%d",tab[i]);
}

puts("Podaj jakiego elementu szukasz\n");
scanf("%d",&x);
printf("Index szukanego elementu to %d\n",szukanie_binarne(tab,n,x));

return 0;

}
void sortuj(int tab[],int n)
{
int i,j,temp;

for(i=0;i<n;i++)
	for(j=i+1;j<n;j++)
	{
		if(tab[i]>tab[j])
		{
			temp=tab[j];
			tab[j]=tab[i];
				tab[i]=temp;
		}
	}

}

int szukanie_binarne(int tab[],int n,int x)
{
int left,right,mid;
left=0;
right=n-1;

while(left<=right)
{
	mid=(left+right)/2;
	if(tab[mid]==x)
	{
		return mid;
	}	
		
	else
		if(x<tab[mid])
			right=mid-1;
		else
			left=mid+1;			
}	

return -1;

}

0
  1. idz po rozum do glowy: skoro tablica jest posortowana, to potrzebujesz wszystkch indeksow wystapien?
  2. w punktach "return <index>", tam gdzie cos zostalo faktycznie znalezione, wymien return na dwie petle chodzace od tego indeksu co jedno oczko w lewo/w prawo i porownujace elementy z szukanym tak dlugo, az znajda pierwszy nie rowny. w efekcie dostaniesz z kazdej petli kraniec ciagu elementow rownych.
    1a) jesli spodziewasz sie duzej procentowo liczby 'trafien', wymien petle lewo-prawo na rekurencyjne wyszukiwanie w lewej podtablicy i w prawej podtablicy
  3. twoja funkcja niech zwraca structure z dwoma liczbami: index-od, index-do, np. std::pair<size_t, size_t>

1 użytkowników online, w tym zalogowanych: 0, gości: 1