Advertisement
bolji_programer

Algoritmi za pretragu - Jump search

Jan 5th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.34 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath> // zbog sqrt
  3. #include <algorithm> // zbog min
  4. using namespace std;
  5.  
  6. int JumpSearch(int A[], int n, int x)
  7. {
  8.     // Broj za koji skacemo u jednom koraku
  9.     int step=sqrt(n);
  10.  
  11.     int start=0;
  12.  
  13.     // Trazenje bloka u kojem se element nalazi
  14.     while (A[min(step,n)-1]<x)
  15.     {
  16.         start=step; // pamtimo odakle je poceo skok
  17.         step=step+sqrt(n); // skacemo na sljedeci blok
  18.  
  19.         if (start>=n)
  20.             return -1; // nema elementa
  21.     }
  22.  
  23.     // linearna pretraga za blok u kome se element nalazi
  24.     while (A[start]<x)
  25.     {
  26.         start++; // povecavamo start
  27.  
  28.         // ako smo presli cijeli iterval ili dosli do kraja niza
  29.         // u tom slucaju traznog elementa nema pa vracamo -1
  30.         if (start==min(step,n))
  31.             return -1;
  32.     }
  33.  
  34.     // provjeravamo sljedeci element
  35.     if (A[start]==x)
  36.         return start;
  37.  
  38.     return -1; // nema elementa
  39. }
  40.  
  41. int main()
  42. {
  43.     int n,x;
  44.     cin>>n; // broj elemenata niza
  45.  
  46.     int A[n];
  47.  
  48.     for (int i=0;i<n;i++)
  49.         cin>>A[i]; // unos niza
  50.  
  51.     cin>>x; // element koji trazimo
  52.  
  53.     int res=JumpSearch(A,n,x); // pozivamo funkciju
  54.  
  55.     if (res==-1) cout<<"U nizu nema trazenog broja"<<endl; // nema elementa
  56.     else cout<<"Broj se nalazi na poziciji "<<res<<endl; // ima elementa
  57.  
  58.     return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement