From b94d1a14ed7a27eb206ede4d2606d400b1e50361 Mon Sep 17 00:00:00 2001 From: ahitt6345 Date: Mon, 1 Feb 2016 17:25:06 -0800 Subject: [PATCH 1/2] Line of code takes 12 seconds off runtime. Apparently, this tim sort keeps merging uneven runs. Adding this code makes sure it prioritizes Even Runs. I ran this timsort(before edit) on 1000000 Integers. It took a whopping 12 SECONDS vs. The normal merge sort's 0.5 seconds. Now, it's run time is improved to 0.9 seconds. --- 30timsort.js | 1 + 1 file changed, 1 insertion(+) diff --git a/30timsort.js b/30timsort.js index c64c117..afeee9a 100644 --- a/30timsort.js +++ b/30timsort.js @@ -121,6 +121,7 @@ var whenMerge = function (state) { var preRun = state.runStack[state.runStack.length - 2]; if (state.runStack.length === 2) return preRun.length <= curRun.length; var pre2Run = state.runStack[state.runStack.length - 3]; + if (curRun.length === preRun.length){return true;} return pre2Run.length <= preRun.length + curRun.length; }; From 0066529056d7e545f67d96f99c2c7637106669ae Mon Sep 17 00:00:00 2001 From: ahitt6345 Date: Mon, 1 Feb 2016 18:22:32 -0800 Subject: [PATCH 2/2] Update 30timsort.js --- 30timsort.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/30timsort.js b/30timsort.js index afeee9a..11ad1dc 100644 --- a/30timsort.js +++ b/30timsort.js @@ -121,7 +121,7 @@ var whenMerge = function (state) { var preRun = state.runStack[state.runStack.length - 2]; if (state.runStack.length === 2) return preRun.length <= curRun.length; var pre2Run = state.runStack[state.runStack.length - 3]; - if (curRun.length === preRun.length){return true;} + if (curRun.length >= preRun.length){return true;} return pre2Run.length <= preRun.length + curRun.length; };