Во-первых: сортировка является мутатором, что означает, что сортировка происходит на месте. Поэтому, чтобы избежать непреднамеренных последствий, я бы изменил
var sorted_results = results.sort(value);
до
var sorted_results = results.slice(0).sort(value);
Если, конечно, вы не хотите, чтобы он сортировался на месте, но тогда зачем вам нужна переменная sorted_results
?
Что касается самой сортировки - мне кажется, что целочисленная сортировка работает нормально, проблема в том, что строки в смешанном целочисленном и строковом сценарии, как видно из его примера: http://jsfiddle.net/QJ5fM/,, где сортируется следующие массивы совсем по другому:
[[16],[131],['aa'],['0hey'],[176],[100],['hey'],[1],[12]];
[['aa'],[16],[131],['0hey'],[176],[100],['hey'],[1],[12]];
[['aa'],['0hey'],[16],[131],[176],[100],['hey'],[1],[12]];
дает следующий результат в Chrome 9:
1,12,0hey,aa,hey,16,100,131,176
1,12,0hey,16,100,131,176,aa,hey
1,12,16,100,131,176,0hey,aa,hey
следующее в Firefox 3.6:
1,12,0hey,aa,hey,16,100,131,176
1,12,0hey,hey,16,100,131,176,aa
1,12,hey,16,100,131,176,0hey,aa
и следующее в ie8:
0hey,aa,hey,1,12,16,100,131,176
0hey,aa,hey,1,12,16,100,131,176
0hey,aa,hey,1,12,16,100,131,176
Как это ни удивительно, кажется, что ie8 имеет единственную вменяемую или, по крайней мере, последовательную реализацию: P