I'm using this Javascript code to view the order in which array elements are compared when the sort
method is invoked.
function log(text)
{
document.documentElement.appendChild(document.createElement('div')).appendChild(document.createTextNode(text));
}
[5, 4, 3, 2, 1].sort(function (a, b) {
log("comparing " + a + " and " + b);
return a - b;
});
I'm not surprised to see that different browsers produce different outputs because of diverse implementations. What I cannot realize is why IE and Opera sometimes compare the same pair of values twice in succession. That doesn't make any sense to me. Sorting arrays looks like such a basic language feature I'm probably missing something here. Can someone explain this behavior?
Here are my test results:
IE 9 and 10
- comparing 4 and 5
- comparing 4 and 5
- comparing 3 and 5
- comparing 3 and 4
- comparing 2 and 5
- comparing 2 and 4
- comparing 2 and 3
- comparing 1 and 5
- comparing 1 and 3
- comparing 1 and 2
Firefox
- comparing 5 and 4
- comparing 5 and 3
- comparing 4 and 3
- comparing 2 and 1
- comparing 5 and 1
- comparing 3 and 1
- comparing 3 and 2
Chrome
- comparing 5 and 4
- comparing 5 and 3
- comparing 4 and 3
- comparing 5 and 2
- comparing 4 and 2
- comparing 3 and 2
- comparing 5 and 1
- comparing 4 and 1
- comparing 3 and 1
- comparing 2 and 1
Opera
- comparing 5 and 4
- comparing 2 and 1
- comparing 3 and 1
- comparing 3 and 1
- comparing 3 and 2
- comparing 5 and 1
- comparing 4 and 1
- comparing 4 and 2
- comparing 4 and 3
And the proof of concept: http://jsfiddle.net/Sd9ph/