Advertisement
jaoc

ASD-Tema6-Ex3

Nov 18th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.84 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdlib.h>
  3. using namespace std;
  4. int partitie(int v[],int st,int dr,int poz)
  5. {
  6.     int i=st,j=dr,k=v[poz];
  7.     while(1)
  8.     {
  9.         while(v[i]<k)
  10.             i++;
  11.         while(v[j]>k)
  12.             j--;
  13.         if(i<j)
  14.             swap(v[i],v[j]);
  15.         else return i;
  16.     }
  17. }
  18. int quickselect(int v[],int st,int dr,int k)
  19. {
  20.     if(k<=dr-st+1)
  21.     {
  22.         int poz;
  23.         if(st!=dr)
  24.             poz=rand()%(dr-st)+st;
  25.         else poz=st;
  26.         poz = partitie(v,st,dr,poz);
  27.         if(poz-st+1==k)
  28.             return v[poz];
  29.         if(poz-st+1>k)
  30.             quickselect(v,st,poz-1,k);
  31.         else quickselect(v,poz+1,dr,k-poz+st-1);
  32.     }
  33.     else return -1;
  34. }
  35. int main()
  36. {
  37.     int n=6,k,v[100]={0,7,10,4,3,20,15};
  38.     cin >> k;
  39.     cout << quickselect(v,1,n,k);
  40.     return 0;
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement