Карманная сортировка — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 3: Строка 3:
 
== Алгоритм сортировки ==
 
== Алгоритм сортировки ==
 
=== Принцип работы алгоритма вообщем ===
 
=== Принцип работы алгоритма вообщем ===
 +
[[Файл:Bucket-sort-example.jpg|right|300px|thumb|Пример работы рекурсивного Bucketsort.]]
 
* элементы массива входных данных разбивается на <tex>k</tex> блоков("карманов","корзин").
 
* элементы массива входных данных разбивается на <tex>k</tex> блоков("карманов","корзин").
* затем каждый из блоков сортируется либо отдельной какой либо другой сортировкой, либо рекурсивно тем же методом разбиения.
+
* каждый из блоков сортируется либо отдельной какой либо другой сортировкой, либо рекурсивно тем же методом разбиения.
* После сортировки данных каждого "кармана" данные записываются в массив в порядке разбиения на карманы .
+
* Из каждого отсортированного блока записываются в массив , в порядке разбиения на блоки.
Важно отметить , что разбиение на "карманы" производится таким образом, чтобы каждый следующий "карман" был больше предыдущего.
+
Важно отметить , что разбиение на блоки производится таким образом, чтобы элементы каждого следующего блока были бы больше предыдущего.
 
=== Реализация Алгоритма===
 
=== Реализация Алгоритма===
Рассмотрим код работы алгоритма. Сортируемыми объектами будем рассматривать строки.
+
Рассмотрим код работы алгоритма.  
Длина каждой строки равна p .
+
 
 
<wikitex>
 
<wikitex>
 
  Bucketsort(A,j){
 
  Bucketsort(A,j){
Строка 17: Строка 18:
 
     строк.
 
     строк.
 
     for i = 0  to A.length() - 1   
 
     for i = 0  to A.length() - 1   
       push_back A[i] to buckets[partion(A[i],j)]  
+
       добавляем A[i] в конец массива buckets[partion(A[i],j)]  
 
     // partion функция которая по данному объекту и индексу возвращает число от 0 до Base - 1
 
     // partion функция которая по данному объекту и индексу возвращает число от 0 до Base - 1
 
     // в случаи со строками функция partion возвращает код j-ого символа строки A[i].   
 
     // в случаи со строками функция partion возвращает код j-ого символа строки A[i].   
 
     for i = 0 to Base - 1
 
     for i = 0 to Base - 1
 
         buckets[i] = Bucketsort(buckets[i],j+1)
 
         buckets[i] = Bucketsort(buckets[i],j+1)
     answer <- инициализируем пустой массив
+
     answer <- инициализируем пустой массив(в который записывается отсортированный набор данных)
 
     for i = 0 to Base - 1
 
     for i = 0 to Base - 1
 
         for k = 0 to buckets[i].length() - 1
 
         for k = 0 to buckets[i].length() - 1
           push_back buckets[i][k] to answer
+
           добавляем  buckets[i][k] в конец массива answer
 
     return answer
 
     return answer
 
  }
 
  }
 
 
 
</wikitex>
 
</wikitex>
Base - основание системы счисления в случаи со строками 256.
+
Base - основание системы счисления в случаи со строками Base = 256.
[[Файл:Цифровая_сортировка.png|thumb|right|450px|
+
Приведенный код, работает не только для строк , а в принципе для любых объектов для которых можно определить порядок, системы счисления и функцию partion.
 
 
 
 
 
==Сложность==
 
==Сложность==
  

Версия 17:08, 10 июня 2012

Карманная сортировка(Bucket sort) — алгоритм сортировки , основанный на предположение о равномерном распределении входных данных.

Алгоритм сортировки

Принцип работы алгоритма вообщем

Пример работы рекурсивного Bucketsort.
  • элементы массива входных данных разбивается на [math]k[/math] блоков("карманов","корзин").
  • каждый из блоков сортируется либо отдельной какой либо другой сортировкой, либо рекурсивно тем же методом разбиения.
  • Из каждого отсортированного блока записываются в массив , в порядке разбиения на блоки.

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

Реализация Алгоритма

Рассмотрим код работы алгоритма.

<wikitex>

Bucketsort(A,j){
    if (A.length() < 2 || i == p + 1)
        return A;
    buckets <- инициализируем массив длины Base , где каждая ячейка список входных объектов (в нашем случаи    
    строк.
    for i = 0  to A.length() - 1  
      добавляем A[i] в конец массива 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
          добавляем  buckets[i][k] в конец массива answer
    return answer
}

</wikitex> Base - основание системы счисления в случаи со строками Base = 256. Приведенный код, работает не только для строк , а в принципе для любых объектов для которых можно определить порядок, системы счисления и функцию partion.

Сложность