fcn qselect(list,nth){ // in place quick select fcn(list,left,right,nth){ if (left==right) return(list[left]); pivotIndex:=(left+right)/2; // or median of first,middle,last // partition pivot:=list[pivotIndex]; list.swap(pivotIndex,right); // move pivot to end pivotIndex := left; i:=left; do(right-left){ // foreach i in ([left..right-1]) if (list[i] < pivot){ list.swap(i,pivotIndex); pivotIndex += 1; } i += 1; } list.swap(pivotIndex,right); // move pivot to final place if (nth==pivotIndex) return(list[nth]); if (nth