Объектно-ориентированное программирование на C++. Андрианова А.А - 25 стр.

UptoLike

Объектно-ориентированное программирование на С++
В этом случае вызов функции будет выглядеть несколько иначе, так
как требуется явно указать все три типа данных, для генерации
конкретной функции:
int *a = new int[5];
int n = 5;
. . .
// вызов функции
double *b = multiply<int, double, double>(a, n, 2.4);
. . .
Существует большое количество задач, которые решаются одинаково
независимо от типов используемых данных. Часто используемые
алгоритмы удобно оформить в виде шаблонов. Примерами таких
алгоритмов являются поиск, сортировка, слияние структур данных и пр.
Рассмотрим шаблон функции сортировки элементов массива
произвольного типа с помощью алгоритма Хоара (алгоритм быстрой
сортировки).
Идея быстрой сортировки состоит в том, чтобы разделить
сортируемый массив на две части таким образом, чтобы можно было
каждую из них упорядочить по отдельности, а затем объединить эти части
в единый упорядоченный массив. Для такого объединения необходимо,
чтобы все элементы первой части массива были меньше любого элемента
из второй части. Для разделения массива на две части можно выбрать
произвольный элемент нашем случае первый), а затем все элементы
просматривать одновременно с начала и с конца. Как только в начале
массива найдется некоторый элемент больше выбранного, а в конце
элемент меньше выбранного, нужно поменять их местами и продолжить
просмотр. Когда индексы просмотра будут указывать на один и тот же
элемент, то выбранный элемент помещается в эту позицию. Далее
продолжаем сортировку каждой части по отдельности с помощью
рекурсивного вызова.
// m – адрес первого элемента сортируемой части массива
// n – количество элементов в сортируемой части массива
template <class T> void QuickSort(T* m, int n)
{
// если в массиве остался один элемент,
// массив отсортирован
if(n <= 1)
return;
// i – индекс просмотра массива с начала
25
                           Объектно-ориентированное программирование на С++
    В этом случае вызов функции будет выглядеть несколько иначе, так
как требуется явно указать все три типа данных, для генерации
конкретной функции:

     int *a = new int[5];
     int n = 5;
     .    .    .
     // вызов функции
     double *b = multiply(a, n, 2.4);
     .    .    .

    Существует большое количество задач, которые решаются одинаково
независимо от типов используемых данных. Часто используемые
алгоритмы удобно оформить в виде шаблонов. Примерами таких
алгоритмов являются поиск, сортировка, слияние структур данных и пр.
Рассмотрим шаблон функции сортировки элементов массива
произвольного типа с помощью алгоритма Хоара (алгоритм быстрой
сортировки).
    Идея быстрой сортировки состоит в том, чтобы разделить
сортируемый массив на две части таким образом, чтобы можно было
каждую из них упорядочить по отдельности, а затем объединить эти части
в единый упорядоченный массив. Для такого объединения необходимо,
чтобы все элементы первой части массива были меньше любого элемента
из второй части. Для разделения массива на две части можно выбрать
произвольный элемент (в нашем случае – первый), а затем все элементы
просматривать одновременно с начала и с конца. Как только в начале
массива найдется некоторый элемент больше выбранного, а в конце –
элемент меньше выбранного, нужно поменять их местами и продолжить
просмотр. Когда индексы просмотра будут указывать на один и тот же
элемент, то выбранный элемент помещается в эту позицию. Далее
продолжаем сортировку каждой части по отдельности с помощью
рекурсивного вызова.

     // m – адрес первого элемента сортируемой части массива
     // n – количество элементов в сортируемой части массива
     template  void QuickSort(T* m, int n)
     {
          // если в массиве остался один элемент,
          // массив отсортирован
          if(n <= 1)
               return;
          // i – индекс просмотра массива с начала

                                                                         25