В первом случае ты сортируешь уже отсортированный массив повторно(при каждой сортировке начальное состояние разное), во втором ты сортируешь каждый раз новый(начальное состояние одно и то же).
Использование
Math.random
в
sort
в любом случае
не даст нормального распределения, т.к. под капотом используется определённый оптимизированный алгоритм сортировки, к тому же
браузерозаивисимый и разный для разных случаев.
Как это всё влияет на конечный результат - одному богу известно (или дотошному математику, который засядет с сырцами браузера и распишет километровые формулы, да).
Если нормальное распределение получилось на практике - это совпадение, а не гарантия, что так и будет впредь.
Факт в том, что не надо использовать метод
sort
ни для чего, кроме его предназначения - детерминированной сортировки.
Используй нормальный алгоритм перемешивания и будет тебе счастье.
первый попасшийся вариант function shuffle( array ) { // Shuffle an array
//
// + original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
for(var j, x, i = array.length; i; j = parseInt(Math.random() * i), x = array[--i], array[i] = array[j], array[j] = x);
return true;
}