Перестановка вектора

Мы также можем положиться на функцию браузера calc () в соответствии с: https://caniuse.com/#search=calc ()

$isize: 16px;
$psize: calc(#{$isize} - 2px);

input {
  font-size: $isize;
}

p {
  font-size: $psize;
}

8
задан tunnuz 7 February 2009 в 15:34
поделиться

2 ответа

Да. Начиная с крайнего левого положения, мы помещаем элемент там в его правильное положение i путем свопинга его с (другим) неуместным элементом в том положении i. Это - то, где нам нужен O (1) дополнительное пространство. Мы имеем в наличии пар свопинга элементов, пока элемент в этом положении не корректен. Только затем сделайте мы продолжаем двигаться к следующему положению и делаем то же самое.

Пример:

[5 3 2 1 0 4] начальное состояние

[4 3 2 1 0 5] подкачал (5,4), 5 находится теперь в правильном положении, но 4 является все еще неправильным

[0 3 2 1 4 5] подкачал (4,0), теперь и 4 и 0 находятся в правильных положениях, движении к следующей позиции

[0 1 2 3 4 5] подкачал (3,1), теперь 1 и 3 находятся оба в правильных положениях, движении к следующей позиции

[0 1 2 3 4 5] все элементы находятся в правильных положениях, конце.

Примечание:

Так как каждая операция подкачки помещает по крайней мере один (двух) элементы в правильном положении, нам нужны не больше, чем N такие подкачки в целом.

12
ответ дан 5 December 2019 в 08:54
поделиться

Решение Zach очень хорошо.

Однако, я задавался вопросом, почему существует любая потребность отсортировать. Если у Вас есть перестановка индексов, используйте значения в качестве указателя на старый массив.

Это может избавить от необходимости сортировать массив во-первых. Это не решение, которое может использоваться во всех случаях, но оно будет хорошо работать в большинстве случаев.

Например:

a = [45,89,22,31,23,76];
b = [5,3,2,1,0,4]

Теперь, если Вы хотите сократить через значения в a, можно сделать что-то как (псевдокод):

for i=0 to 4
{
    process(a[i]);
}

Если Вы хотите циклично выполниться через значения в новом порядке, сделайте:

for i=0 to 4
{
    process(a[b[i]]);
}

Как отмечалось ранее, этот soluion может быть достаточным во многих случаях, но не может в некоторых других случаях. Для других случаев можно использовать решение Zach. Но для случаев, где это решение может использоваться, это лучше, потому что никакая сортировка не необходима вообще.

7
ответ дан 5 December 2019 в 08:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: