2013-09-04 4 views
0

Я пытаюсь сортировать большой список массива массивов, используя ниже кодаСортировка списка Массива равных массивов длины на основе индекса

function _stInd(arr, ind){ 
    return arr.sort(function(a, b) { 
    var _1 = a[ind]; 
    var _2 = b[ind]; 
    return (_1 < _2) ? -1 : (_1 > _2) ? 1 : 0; 
    }); 
} 

Пожалуйста, посмотрите на этом бункере для получения дополнительной информации http://jsbin.com/UqEPOfa/3/edit

код работает хорошо, и он также может сортировать. Но проблема в том, что это слишком много, если я пытаюсь сортировать более 1 миллиона списков массивов на основе одного индекса.

Пожалуйста, предложите мне улучшить этот код

+1

Предлагаемое улучшение стиля: 'return a [ind] - b [ind]'. Он просто должен быть положительным/отрицательным/нулевым, а не '-1',' 1', '0'. – Nicole

+3

Миллион массивов займет много времени независимо от того, что вы делаете. Сортировка - это 'O (n log n)' в лучшем случае ... –

+2

Сортировка больших списков всегда является проблемой. Однако, вопреки тому, что говорит Колинк, вы можете идти быстрее, чем O (n log n), если вы сортируете в конечном наборе. Если вы сортируете целые числа в ограниченном диапазоне, посмотрите на сортировку подсчета (http://en.wikipedia.org/wiki/Counting_sort), сортировку radix (http://en.wikipedia.org/wiki/Radix_sort) или bucket sort (http://en.wikipedia.org/wiki/Bucket_sort). – MrP

ответ

1

Я хотел бы предложить вам сделать две конкретные вещи:

  1. принимать во внимание данные набора вам нужно будет сортировать, что обычно помогает при сортировке Быстрее. (как указано в комментарии, если его ограниченный диапазон делает сортировку)

  2. Начать использование многопоточных (фактически называемых рабочих потоков). ДА JAVASCRIPT DOEST ПОДДЕРЖИВАЕТ СЕЙЧАС. Так что сделайте сортировку слияния и начните показывать результаты частично. Подробнее о том, как использовать многопоточность, см. Рабочие потоки. Один хороший учебник, о котором я могу думать, это http://ejohn.org/blog/web-workers/

+0

Не могли бы вы сообщить мне, как вы можете отсортировать один массив с помощью нескольких потоков ?. Если я хочу использовать потоки, в этом случае веб-работники помогают только для неблокирующего пользовательского интерфейса, а не для повышения производительности. Что касается вашего первого пункта, это помогает мне сортировать только числа, а не строки. – Exception

+0

http://en.wikipedia.org/wiki/Merge_sort. Думаю, вам нужно больше опыта с алгоритмами. – Neeraj

+0

Пожалуйста, посмотрите мой отредактированный комментарий. – Exception

Смежные вопросы