!YS-v0 v =: +[9 8 7 6 5 0 1 2 3 4] defn main(): say: map \(quickselect v _): v.#:range defn quickselect(a k): loop arr a:V, current-k k: pivot-idx =: arr.#:rand-int pivot =: arr.$pivot-idx remaining =: concat subvec(arr 0 pivot-idx): subvec(arr pivot-idx.++) left =: remaining.filter(\(_ < pivot)) right =: remaining.filter(\(_ >= pivot)) left-count =: left.# cond: current-k == left-count: pivot current-k < left-count: recur: left:V current-k else: recur right:V: (current-k - left-count).--