From 7d6418220e9aa69cf934a3a767ada5452faac931 Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Sat, 9 Mar 2024 20:49:52 +0100 Subject: [PATCH] use median of three to increase our chances --- quick_select.hh | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/quick_select.hh b/quick_select.hh index 31ae9b0..d0a3929 100644 --- a/quick_select.hh +++ b/quick_select.hh @@ -18,11 +18,21 @@ static inline void swap(TYPE *a, int i, int j) a[j] = t; } +template +static inline void sort(TYPE *a, int i, int j, int k) +{ + if (a[i] > a[j]) + swap(a, i, j); + if (a[i] > a[k]) + swap(a, i, k); + if (a[j] > a[k]) + swap(a, j, k); +} + template static int partition(TYPE *a, int l, int h) { - int p = (l + h) / 2; - swap(a, p, h); + sort(a, (l + h) / 2, h, l); for (int i = l; i < h; ++i) if (a[i] < a[h]) swap(a, i, l++);