From 8a2cb61435d6a7ef8db556becc325ec516520c49 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Tue, 13 Jun 2023 07:17:20 +1000 Subject: [PATCH] Made quicksort on mostly-sorted arrays more efficient --- repl/lib_standard.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/repl/lib_standard.c b/repl/lib_standard.c index 4514446..2cb7528 100644 --- a/repl/lib_standard.c +++ b/repl/lib_standard.c @@ -1471,8 +1471,13 @@ static void recursiveLiteralQuicksortUtil(Toy_Interpreter* interpreter, Toy_Lite swapLiteralsUtil(&ptr[runner], &ptr[literalCount - 1]); //recurse on each end - recursiveLiteralQuicksortUtil(interpreter, &ptr[0], runner, fnCompareLiteral); - recursiveLiteralQuicksortUtil(interpreter, &ptr[runner + 1], literalCount - runner - 1, fnCompareLiteral); + if (runner > 0) { + recursiveLiteralQuicksortUtil(interpreter, &ptr[0], runner, fnCompareLiteral); + } + + if (runner < literalCount) { + recursiveLiteralQuicksortUtil(interpreter, &ptr[runner + 1], literalCount - runner - 1, fnCompareLiteral); + } } static int nativeSort(Toy_Interpreter* interpreter, Toy_LiteralArray* arguments) {