summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2012-02-22 15:49:07 -0800
committerKaz Kylheku <kaz@kylheku.com>2012-02-22 15:49:07 -0800
commite2f5aecbef1b41f65b65bd580531f5869d1e232f (patch)
tree25c444cc895c38b022560e709b6414a70d618b86
parent5eea3de51c979f554ce868d101f6503f982169cc (diff)
downloadtxr-e2f5aecbef1b41f65b65bd580531f5869d1e232f.tar.gz
txr-e2f5aecbef1b41f65b65bd580531f5869d1e232f.tar.bz2
txr-e2f5aecbef1b41f65b65bd580531f5869d1e232f.zip
* lib.c (quicksort): Incorrect pivot selection.
-rw-r--r--ChangeLog4
-rw-r--r--lib.c2
2 files changed, 5 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 9e354cb2..23c623da 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2012-02-22 Kaz Kylheku <kaz@kylheku.com>
+ * lib.c (quicksort): Incorrect pivot selection.
+
+2012-02-22 Kaz Kylheku <kaz@kylheku.com>
+
* eval.c (del_s): New symbol variable.
(eval_error): nostatic added to suppress a g++ warning.
(dwim_loc): Takes new value as the original unevaluated form so
diff --git a/lib.c b/lib.c
index 35395a7c..d405a991 100644
--- a/lib.c
+++ b/lib.c
@@ -3578,7 +3578,7 @@ static void swap(val vec, val i, val j)
static void quicksort(val vec, val lessfun, val keyfun, cnum from, cnum to)
{
if (to - from >= 2) {
- cnum pivot = (to - from) / 2;
+ cnum pivot = to + (to - from) / 2;
cnum i, j;
val pval = ref(vec, num_fast(pivot));
val pkval = funcall1(keyfun, pval);