From 174c62902c68e9fc7d5028b54666b4fd3630a30b Mon Sep 17 00:00:00 2001 From: Dave Gamble Date: Fri, 13 Feb 2015 20:31:33 +0000 Subject: [PATCH] Since we anticipate repeated comparisons, add in a test for sorted lists, which can reduce cost for sorted objects to O(N) git-svn-id: svn://svn.code.sf.net/p/cjson/code@72 e3330c51-1366-4df0-8b21-3ccf24e3d50e --- cJSON_Utils.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cJSON_Utils.c b/cJSON_Utils.c index 85913c0..dc20fd7 100644 --- a/cJSON_Utils.c +++ b/cJSON_Utils.c @@ -304,6 +304,9 @@ static cJSON *cJSONUtils_SortList(cJSON *list) cJSON *first=list,*second=list,*ptr=list; if (!list || !list->next) return list; /* One entry is sorted already. */ + + while (ptr && ptr->next && cJSONUtils_strcasecmp(ptr->string,ptr->next->string)<0) ptr=ptr->next; /* Test for list sorted. */ + if (!ptr || !ptr->next) return list; /* Leave sorted lists unmodified. */ while (ptr) {second=second->next;ptr=ptr->next;if (ptr) ptr=ptr->next;} /* Walk two pointers to find the middle. */ if (second && second->prev) second->prev->next=0; /* Split the lists */