Перетасовка отсортированного массива

86
12

Если нам задан отсортированный массив, какой алгоритм мы можем использовать для создания выходного массива, который имеет те же элементы, что и отсортированный массив, но элементы должны быть случайным образом перетасованы. Я ищу алгоритм, который имеет сложность O (n)

спросил(а) 2020-03-26T20:06:01+03:00 2 месяца назад
1
Решение
131

Collections.shuffle(List) имеет временную сложность O(n). Вы можете использовать Arrays.asList(), чтобы обернуть массив, чтобы вы могли использовать эту функцию.


Что он делает,

Для каждого элемента от последнего ко второму элементу обмениваем элемент на случайный элемент из остальной части списка, который включает в себя сам, то есть он может случайно не перемещать элемент.


for (int i=size; i>1; i--)
swap(list, i-1, rnd.nextInt(i));

ответил(а) 2020-03-26T20:17:32.112986+03:00 2 месяца назад
75

вы можете использовать этот код


    // Create a list
List list = new ArrayList();
// Add elements to list
// Shuffle the elements in the list
Collections.shuffle(list);
// Create an array
String[] array = new String[] { "a", "b", "c" };
// Shuffle the elements in the array
Collections.shuffle(Arrays.asList(array));

for (int i = 0; i < array.length; i++) {
System.out.println("Count is: " + i + " letter is " + array[i]);
}


Это напечатает что-то вроде:

Count: 0 letter is b

Граф: 1 буква - это

Граф: 2 буквы c



из http://www.exampledepot.com/egs/java.util/coll_Shuffle.html

ответил(а) 2020-03-26T20:06:01+03:00 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема