Advertisement
Pug_coder

pik

Oct 23rd, 2020
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.92 KB | None | 0 0
  1. unsigned long peak(unsigned long nel,
  2.         int (*less)(unsigned long, unsigned long))
  3. {
  4.         unsigned long left = 0, right = nel - 1, c = (left+right)/2;
  5.         while(left <= right)
  6.         {      
  7.                 int r , l;
  8.                 if(c == 0)
  9.                 {
  10.                         l = 0;
  11.                         r = less(c, c+1);
  12.                 }
  13.                 else if(c == nel-1)
  14.                 {
  15.                   r = 0;
  16.                   l = less(c,c+1);      
  17.                 }
  18.                 else
  19.                 {
  20.                         r=less(c,c+1);
  21.                         l=less(c,c-1);
  22.                 }
  23.                 if(r == 0 && l == 0) return c;
  24.                 else if(r == 0 && l == 1) right = c - 1;
  25.                 else if (r == 1 && l == 0) left = c + 1;
  26.                 else right = c - 1;
  27.                 c = (left+1)/2 + right/2;
  28.  
  29.         }
  30.         return -1;
  31. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement