9

Any idea how I can view the implementation of native javascript methods specifically the sort method. The reason why I am looking for this I am just wondering what the algorithm used is and what is the complexity of the same.

I am sorting a huge json object in javascript and I was wondering if I should write my own mety hod for the same.

Also does the implementation differ from browser to browser?

3
  • 1
    Whatever you're doing, I can guarantee you that you won't beat hand-optimized C or C++ code in JS for the general case. Just use the existing option, it will work well enough. And if it doesn't, the bottleneck is most likely not sort but some of your algorithms. Commented Jul 10, 2011 at 9:49
  • No there is no other bottleneck..The performance is good enough but as the no of entities increase the no of comparisons increase. Was wondering what goes on inside that method. Commented Jul 10, 2011 at 9:54
  • 1
    Of course the number of comparisions increase, even the best (complexity-wise) sort algorithms are O(n * log n) ;) Commented Jul 10, 2011 at 10:00

3 Answers 3

4

Take a look at the WebKit implementation: https://gist.github.com/964673. Apparently, it uses min sort/selection sort. From: http://svn.webkit.org/repository/webkit/trunk/Source/JavaScriptCore/runtime/ArrayPrototype.cpp

SpiderMonkey seems to indeed use MergeSort. See: http://hg.mozilla.org/mozilla-central/file/28be8df0deb7/js/src/jsarray.cpp.

Sign up to request clarification or add additional context in comments.

Comments

1

Also does the implementation differ from browser to browser?

Yes, the ECMAScript standard does not specify what algorithm should be used. AFAIK Mozillas SpiderMonkey uses mergesort and WebKit uses selection sort. What IE uses you probably have to ask someone at Microsoft, since it's closed source.

And I'm willing to bet a couple of bucks that you cannot come up with a better/faster algorithm than the one implemented into the JavaScript engine of the browsers.

1 Comment

thats true.. but i can write it in a way that suits my problem.. and I am not worried abt the peformance on chrome or FFX. its mostly ie7
0

Unfortunately, there doesn't appear to be a standardized method.

Until that time comes, you could write your own simple alphabetization function:

sortObject = function (){
    var arr = [], i;
    for(i in this){
        arr.push({index:i,content:this[i]});
        delete this[i];
    }
    arr.sort();
    for(i in arr){
        var item = arr[i];
        this[item.index] = item.content;
    }
    return this; // make chainable
}
var obj = {
    acronym: "OOP",
    definition: "Object-Oriented Programming",
    article: "http://wikipedia.org/OOP"
};
sortObject.apply(obj); // indices are "acronym", "article", "definition"

I know this question was asked over a year ago, but I hope this helps you as well as anyone with the same problem.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.