#include #define BIGPART 600 #define SWAP(a,b) temp=(a);(a)=(b);(b)=temp; float select_FR(float arr[], int l_par, int r_par, int k) { int n,i,j,ll,rr,l,r,s,sd; float z,temp,t; l=l_par; r=r_par; while (r>l) { if (r-l > BIGPART) { n=r-l+1; i=k-l+1; z=log(n); s=(int)(0.5*exp(2.*z/3.)); sd=(int)(0.5*sqrt(z*s*(n-s)/n)*((i-n/2)>0?1:-1)); ll=(int)(k-i*s/n+sd); if (l>ll) ll=l; rr=(int)(k+(n-i)*s/n+sd); if (rt) {SWAP(arr[r],arr[l])} while (it) j--; } if (arr[l]==t) { SWAP(arr[l],arr[j]) } else { j++; SWAP(arr[j],arr[r]) } if (j <= k) l = j + 1; if (k <= j) r = j - 1; } return arr[k]; } #undef SWAP #undef BIGPART