Перетасовки массива JSON в Java


Поскольку я не получил удовлетворительного ответа здесь (и я действительно нужно, чтобы получить это происходит в эти выходные), я решил реализовать свой собственный Фишер–Йейтс перемешать, портируя код я нашел на других должностей. Я знаю, что мой метод программирования далека от оптимальной, поэтому я решил разместить это здесь.

Что вы думаете? Его можно улучшить?

public static JSONArray shuffleJsonArray (JSONArray array) throws JSONException {
    // Implementing Fisher–Yates shuffle
        Random rnd = new Random();
        for (int i = array.length() - 1; i >= 0; i--)
        {
          int j = rnd.nextInt(i + 1);
          // Simple swap
          Object object = array.get(j);
          array.put(j, array.get(i));
          array.put(i, object);
        }
    return array;
}


2561
2
задан 4 апреля 2011 в 06:04 Источник Поделиться
Комментарии
1 ответ

Я работает в o(n) времени, и я не уверен, что есть способ, чтобы улучшить это. Похоже, что вы реализовали алгоритм довольно хорошо, ПО на эту страницу http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle

Вы могли бы рассмотреть не используя объекта , если вы можете использовать тип, который хранится в массиве, а не.

Я тоже думал, что я где-то читал, что она должна быть безопасной в цикле до N/2 вместо N (потому что вы обмениваете с элементами от 1..N таким образом, в теории, вам не нужно поменять каждый элемент), но у меня нет твердых доказательств, так что вы принять ваши шансы ;)

2
ответ дан 4 апреля 2011 в 03:04 Источник Поделиться