aboutsummaryrefslogtreecommitdiff
path: root/compat-25.el
diff options
context:
space:
mode:
authorDaniel Mendler <mail@daniel-mendler.de>2023-01-08 13:10:52 +0100
committerDaniel Mendler <mail@daniel-mendler.de>2023-01-08 13:10:52 +0100
commitb9bf90e71c32ac3250f9a6a37eb809d836beb159 (patch)
tree515eb3e372b7c141e53b8f2de36de818f4194bad /compat-25.el
parent1b348a4df924d32b30784ddf816368538e08f49e (diff)
compat-25: Optimize sort, improve test
O(n²) -> O(nlogn)
Diffstat (limited to 'compat-25.el')
-rw-r--r--compat-25.el11
1 files changed, 7 insertions, 4 deletions
diff --git a/compat-25.el b/compat-25.el
index 157fc31..ef0c78b 100644
--- a/compat-25.el
+++ b/compat-25.el
@@ -49,10 +49,13 @@ usage: (bool-vector &rest OBJECTS)"
((listp seq)
(sort seq predicate))
((vectorp seq)
- (let ((cseq (sort (append seq nil) predicate)))
- (dotimes (i (length cseq))
- (setf (aref seq i) (nth i cseq)))
- (apply #'vector cseq)))
+ (let ((list (sort (append seq nil) predicate))
+ (p list)
+ (i 0))
+ (while p
+ (aset seq i (car p))
+ (setq i (1+ i) p (cdr p)))
+ (apply #'vector list)))
((signal 'wrong-type-argument 'list-or-vector-p))))
;;;; Defined in editfns.c