Оптимальные сортировки

В этом разделе находятся сортировки, которые требуют минимальное количество сравнений, как в среднем, так и в наихудшем случае. В первом варианте они они сделаны в виде шаблонов функций для упорядочивания заданных элементов по возрастанию и убыванию:

//*********************** 14.12.2005 **************************//
//
//                 Сортировка двух элементов 
//      Сравнения: 1 в худшем случае, 1 в среднем
//
//*********************** 14.12.2005 **************************//

template <class T> inline void sort123 ( T & a0, T & a1 )...
template <class T> inline void sort321 ( T & a0, T & a1 )...


//*********************** 14.12.2005 **************************//
//
//                 Сортировка трёх элементов
//      Сравнения: 3 в худшем случае, 2.667 в среднем
//
//*********************** 14.12.2005 **************************//

template <class T> inline void sort123 ( T & a0, T & a1, T & a2 )...
template <class T> inline void sort321 ( T & a0, T & a1, T & a2 )...


//*********************** 14.12.2005 **************************//
//
//                 Сортировка 4-х элементов
//      Сравнения: 5 в худшем случае, 4.778 в среднем
//
//*********************** 14.12.2005 **************************//

template <class T> inline void sort123 ( T & a0, T & a1, T & a2, T & a3 )...
template <class T> inline void sort321 ( T & a0, T & a1, T & a2, T & a3 )...


//*********************** 15.12.2005 **************************//
//
//                 Сортировка пяти элементов
//      Сравнения: 7 в худшем случае, 6.933 в среднем
//
//*********************** 15.12.2005 **************************//

template <class T> inline void sort123 ( T & a0, T & a1, T & a2, T & a3, T & a4 )...
template <class T> inline void sort321 ( T & a0, T & a1, T & a2, T & a3, T & a4 )...


//*********************** 16.12.2005 **************************//
//
//                 Сортировка шести элементов
//      Сравнения: 10 в худшем случае, 9.578 в среднем
//
//*********************** 19.12.2005 **************************//

template <class T> inline void sort123 ( T & a0, T & a1, T & a2, T & a3, T & a4, T & a5 )...
template <class T> inline void sort321 ( T & a0, T & a1, T & a2, T & a3, T & a4, T & a5 )...

Во втором варианте шаблоны функций сортируют массивы:

template <class T> inline void sort2_123 ( T * a )...
template <class T> inline void sort2_321 ( T * a )...

template <class T> inline void sort3_123 ( T * a )...
template <class T> inline void sort3_321 ( T * a )...

template <class T> inline void sort4_123 ( T * a )...
template <class T> inline void sort4_321 ( T * a )...

template <class T> inline void sort5_123 ( T * a )...
template <class T> inline void sort5_321 ( T * a )...

template <class T> inline void sort6_123 ( T * a )...
template <class T> inline void sort6_321 ( T * a )...

Описание алгоритмов для пяти и шести элементов можно прочитать в книге "Искусство программирования" 3-й том раздел 5.3.1.

Исходники находятся в файле sorting.h.

Наверх

Hosted by uCoz