Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdlib.h>
- using namespace std;
- int partitie(int v[],int st,int dr,int poz)
- {
- int i=st,j=dr,k=v[poz];
- while(1)
- {
- while(v[i]<k)
- i++;
- while(v[j]>k)
- j--;
- if(i<j)
- swap(v[i],v[j]);
- else return i;
- }
- }
- int quickselect(int v[],int st,int dr,int k)
- {
- if(k<=dr-st+1)
- {
- int poz;
- if(st!=dr)
- poz=rand()%(dr-st)+st;
- else poz=st;
- poz = partitie(v,st,dr,poz);
- if(poz-st+1==k)
- return v[poz];
- if(poz-st+1>k)
- quickselect(v,st,poz-1,k);
- else quickselect(v,poz+1,dr,k-poz+st-1);
- }
- else return -1;
- }
- int main()
- {
- int n=6,k,v[100]={0,7,10,4,3,20,15};
- cin >> k;
- cout << quickselect(v,1,n,k);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement