Witam,
coś mi nie zawsze dobrze działa wyszukiwanie przez interpolację, niby liczba w tablicy jest, a program kończy działanie.
#define MAX 25
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <stdlib.h>
using namespace std;
int main()
{
int tab[MAX];
int i=0, j=0, liczba=0, x=0, u=0, temp=0, h=0, w=0, e=0, p=0, k=0,z=0;
float licznik_porownan=0, licznik_zamiany=0;
int wybor, l, t;
float srednia_operacji=0;
srand((unsigned)time(NULL));
// POCZATEK WYPELNIANIA TABLICY LICZBAMI LOSOWYMI
for (i=0; i<MAX; i++)
{
tab[i]=rand() % (MAX) + 0;
}
// KONIEC WYPE£NIANIA TABLICY
// POCZATEK SORTOWANIA TABLICY - INSERTION SORT
for(j=0;j<MAX-1;j++)
{
for(i=0;i<MAX-1;i++)
{
if(tab[i]>tab[i+1])
swap(tab[i],tab[i+1]);
}
}
// KONIEC SORTOWANIA TABLICY - INSERTION SORT
// POCZATEK WYSWIETLANIA TABLICY
for (i=0; i<MAX; i++)
{
cout << tab[i] << "\t";
if((i+1)%5==0)
cout << endl;
}
// KONIEC WYSWIETLANIA TABLICY //
// POCZATEK WYSZUKIWANIA INTERPOLACYJNEGO
cout << "Jakiej liczby szukasz?" << endl;
cin >> x;
i=0;
j=MAX-1;
if (x < tab[0])
{
cout << "Brak szukanego elementu" << endl;
system("pause");
return(-1);
}
if (x > tab[MAX-1])
{
cout << "Brak szukanego elementu" << endl;
system("pause");
return(-1);
}
if (x == tab[0])
{
cout << "Element jest na pierwszej pozycji" << endl;
system("pause");
return 0;
}
if (x==tab[MAX-1])
{
cout << "Element jest na ostatniej pozycji" << endl;
system("pause");
return(MAX-1);
}
p=0;
while (i < j-1)
{
k=(i+(j-i)*(x-tab[i])/(tab[j]-tab[i]));
if(x==tab[k])
{
cout << "Szukany element wynosi " << k << endl;
system("pause");
return(k);
}
// if((i = k) || (j = k)) - sprawdzic co robi
if (x<tab[k]) j=k;
else i=k;
p++;
if (p==MAX)
return(-1);
}
// KONIEC WYSZUKIWANIA INTERPOLACYJNEGO
cout << endl;
srednia_operacji=(licznik_porownan+licznik_zamiany)/2;
cout << endl;
// POCZATEK WYSWIETLANIA LICZNIKOW //
cout << "Licznik porownan wynosi -> " << licznik_porownan << endl;
cout << "Licznik zamian wynosi -> " << licznik_zamiany << endl;
// cout << "Srednia operacji wynosi -> " << srednia_operacji << endl;
// KONIEC WYSWIETLANIA LICZNIKOW //
system("pause");
return 0;
}