Как работает сортировка по основанию для списка однозначных чисел?

Я узнал, что сортировка по основанию работает, сортируя числа в соответствии с цифрами в разряде единиц, а затем в разряде десятков и так далее. Список сортируется после n-го прохода, когда максимальное количество цифр равно n. Но будет ли это работать для списка однозначных чисел? Если да, то как?

Редактировать: Сортировка 1 53 20 359 12 будет следовать этим шагам. ПРОХОД 1: стек 0-20 стек 1-1 стек 2-12 стек 3-53 стек 4- стек 5- стек 6- стек 7- стек 8- стек 9-359 20 1 12 53 359 ПРОХОД 2: стек 0-1 Стопка 1-12 Стопка 2-20 Стопка 3- Стопка 4- Стопка 5-53 359 Стопка 6- Стопка 7- Стопка 8- Стопка 9- 1 12 20 53 359 ПРОХОД 3: уже отсортировано.

Но как это будет работать для этого списка? 7 3 2 5 3 1 0?


person Subramanian Sridharan    schedule 04.05.2016    source источник
comment
Как вы думаете, это сработает? n = 1 так же действителен, как и n = 8.   -  person beaker    schedule 04.05.2016
comment
Я отредактировал свой вопрос.   -  person Subramanian Sridharan    schedule 04.05.2016
comment
Это не отвечает на мой вопрос. Вы, кажется, танцуете вокруг очевидного ответа, потому что не верите в него.   -  person beaker    schedule 04.05.2016
comment
Нет, я не понимаю, как это будет работать. ПРОХОД 1: Стек 0-7 3 2 5 3 1 0 Верно? Как это будет сортироваться?   -  person Subramanian Sridharan    schedule 04.05.2016
comment
Зачем класть все эти числа в одну стопку, если все цифры разные?   -  person beaker    schedule 04.05.2016
comment
Мне жаль. Я неправильно понял. Спасибо :)   -  person Subramanian Sridharan    schedule 04.05.2016
comment
Похоже на правильный вопрос, который был неправильно понят мензуркой. Не похоже, чтобы на него когда-либо отвечали должным образом, и Субраманиан просто отказался от попыток прояснить ситуацию.   -  person Dev    schedule 18.12.2020


Ответы (1)


Предполагая десятичную систему с основанием 10 и сортируя каждую цифру от наименее значимой к наиболее значимой, сортировка по основанию начала бы с сортировки цифр в столбце 1 (10 ^ 0), столбце 10 (10 ^ 1), столбце 100 (10 ^ 2), и так далее.

Чтобы ответить на ваш вопрос более кратко, если у вас есть 10 сегментов (массивов), которые вы сортируете на каждом проходе, сначала будут отсортированы отдельные цифры.

Так, например, если массив со всеми однозначными цифрами передается в сортировку по основанию:

[5, 8, 3, 2, 7, 1]

Результирующий вывод для каждого сегмента будет выглядеть примерно так:

[[], [ 1 ], [ 2 ], [ 3 ], [], [ 5 ], [], [ 7 ], [ 8 ], []]

Что последует после этого прохода (или перед каждым последующим проходом, если цифр больше), так это то, что массив будет сглажен в том порядке, в котором они находятся в соответствующих корзинах, с помощью метода, подобного .concat().

Итак, если вы добавили туда пару двузначных чисел:

[5, 8, 13, 2, 41, 1];

Это будет выглядеть примерно так:

[[], [41, 1], [2], [13], [], [5], [], [], [8], []] // first pass, 1's

[41, 1, 2, 13, 5, 8] // flattened; all single digits are sorted on this pass.


[[1, 2, 5, 8 ], [13], [], [], [41], [], [], [], [], []] // second pass, 10's
[1, 2, 5, 8, 13, 41] // flattened; array is now sorted and returned.

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

person Dev    schedule 17.12.2020