#pragma once int randomizedPartition(std::vector& a, int p, int r) { // generate a random number in {p, ..., r} to swap #ifdef PARTITION_TYPE_LOMUTO int i = p + rand() % (r - p); swap(&a[i], &a[r]); #elif defined PARTITION_TYPE_HOARE int i = rand() % (r - p + 1); swap(&a[p + i], &a[r]); #endif return partition(a, p, r); } uint32_t randomizedSelect(std::vector& a, int p, int r, int i) { // ----------------------------------------------------------- // Pseudo code Alux Nimmervoll, Algo vo3 // Anmerkung: code funktioniert! // // RANDOMIZED-SELECT(A,p,r,i) // if (p==r) then return A[p] // q=RANDOMIZED_PARTITION(A,p,r) //Pivot Element A[q] // k=q-p+1 //Anzahl Elemente A[p..q] // if (i==k) then return A[q] //Pivot ist das gesuchte // elseif (i a, int p, int r, int i) { return randomizedSelect(a, p, r, i); }