Карманная сортировка — различия между версиями
(Новая страница: «Карманная сортировка») |
|||
| Строка 1: | Строка 1: | ||
| − | Карманная сортировка | + | |
| + | '''Карманная сортировка'''(Bucket sort) — алгоритм сортировки , основанный на предположение о равномерном распределении входных данных. | ||
| + | == Алгоритм сортировки == | ||
| + | === Принцип работы алгоритма вообщем === | ||
| + | * элементы массива входных данных разбивается на <tex>k</tex> блоков("карманов","корзин"). | ||
| + | * затем каждый из блоков сортируется либо отдельной какой либо другой сортировкой, либо рекурсивно тем же методом разбиения. | ||
| + | * После сортировки данных каждого "кармана" данные записываются в массив в порядке разбиения на карманы . | ||
| + | Важно отметить , что разбиение на "карманы" производится таким образом, чтобы каждый следующий "карман" был больше предыдущего. | ||
| + | === Реализация Алгоритма=== | ||
| + | Рассмотрим код работы алгоритма. Сортируемыми объектами будем рассматривать строки. | ||
| + | Длина каждой строки равна p . | ||
| + | <wikitex> | ||
| + | Bucketsort(A,j){ | ||
| + | if (A.length() < 2 || i == p + 1) | ||
| + | return A; | ||
| + | buckets <- инициализируем массив длины Base , где каждая ячейка список входных объектов (в нашем случаи | ||
| + | строк. | ||
| + | for i = 0 to A.length() - 1 | ||
| + | push_back A[i] to buckets[partion(A[i],j)] | ||
| + | // partion функция которая по данному объекту и индексу возвращает число от 0 до Base - 1 | ||
| + | // в случаи со строками функция partion возвращает код j-ого символа строки A[i]. | ||
| + | for i = 0 to Base - 1 | ||
| + | buckets[i] = Bucketsort(buckets[i],j+1) | ||
| + | answer <- инициализируем пустой массив | ||
| + | for i = 0 to Base - 1 | ||
| + | for k = 0 to buckets[i].length() - 1 | ||
| + | push_back buckets[i][k] to answer | ||
| + | return answer | ||
| + | } | ||
| + | |||
| + | |||
| + | </wikitex> | ||
| + | Base - основание системы счисления в случаи со строками 256. | ||
| + | [[Файл:Цифровая_сортировка.png|thumb|right|450px| | ||
| + | |||
| + | |||
| + | ==Сложность== | ||
| + | |||
| + | |||
| + | [[Категория: Дискретная математика и алгоритмы]] | ||
| + | [[Категория: Сортировки]] | ||
Версия 14:23, 10 июня 2012
Карманная сортировка(Bucket sort) — алгоритм сортировки , основанный на предположение о равномерном распределении входных данных.
Содержание
Алгоритм сортировки
Принцип работы алгоритма вообщем
- элементы массива входных данных разбивается на блоков("карманов","корзин").
- затем каждый из блоков сортируется либо отдельной какой либо другой сортировкой, либо рекурсивно тем же методом разбиения.
- После сортировки данных каждого "кармана" данные записываются в массив в порядке разбиения на карманы .
Важно отметить , что разбиение на "карманы" производится таким образом, чтобы каждый следующий "карман" был больше предыдущего.
Реализация Алгоритма
Рассмотрим код работы алгоритма. Сортируемыми объектами будем рассматривать строки. Длина каждой строки равна p . <wikitex>
Bucketsort(A,j){
if (A.length() < 2 || i == p + 1)
return A;
buckets <- инициализируем массив длины Base , где каждая ячейка список входных объектов (в нашем случаи
строк.
for i = 0 to A.length() - 1
push_back A[i] to buckets[partion(A[i],j)]
// partion функция которая по данному объекту и индексу возвращает число от 0 до Base - 1
// в случаи со строками функция partion возвращает код j-ого символа строки A[i].
for i = 0 to Base - 1
buckets[i] = Bucketsort(buckets[i],j+1)
answer <- инициализируем пустой массив
for i = 0 to Base - 1
for k = 0 to buckets[i].length() - 1
push_back buckets[i][k] to answer
return answer
}
</wikitex>
Base - основание системы счисления в случаи со строками 256.
[[Файл:Цифровая_сортировка.png|thumb|right|450px|