Сортировка Шелла

141
26 февраля 2018, 01:54

Преподаватель сказал, что строка for (int j = i - step; j >= 0; j = j - step) портит всю суть сортировки Шелла и сказал переделать таким образом, чтобы использовать в функции Сортировку вставками. Как это можно осуществить?

/*Перестановка элементов местами*/
template < typename T >
void swap(T* arr, int j, int step)
{
    T value = arr[j];
    arr[j] = arr[j + step];
    arr[j + step] = value;
}
/*Сортировка элементов масссива*/
template < typename T >
void shell_sort(T* arr, int length)
{
    for (int step = length / 2; step > 0; step = step / 2)  // Расстояние между элементами
    {
        for (int i = step; i < length; i++)                 // Проходим по массиву
        {
            for (int j = i - step; j >= 0; j = j - step)    // Проходим по элементам массива
            {
                if (arr[j] > arr[j + step])                 // Сравниваем элементы
                {
                    swap(arr, j, step);                     // Меняем элементы местами
                }
            }
        }
    }
}

Правильный ли такой код:

/*Сортировка элементов масссива*/
template < typename T >
void shell_sort(T* arr, int length)
{
    for (int step = length / 2; step > 0; step = step / 2)                  // Расстояние между элементами
    {
        insertion_sort(step, length, arr);
    }
}
/*Сортировка вставками элементов масссива*/
template < typename T >
void insertion_sort(int step, int length, T* arr)
{
    for (int i = step; i < length; i++)                                     // Проходим по массиву
    {
        for (int j = i - step; j >= 0 && arr[j] > arr[j + step]; j -= step) // Проходим по элементам массива
        {
            swap(arr, j, step);                                             // Меняем элементы местами
        }
    }
}
READ ALSO
Размер buffer`а

Размер buffer`а

Использую следующий код:

161
Установка Parallel STL на Ububtu 16.04

Установка Parallel STL на Ububtu 16.04

Здравствуйте, подскажите, пожалуйста, как установить Parallel STL на Ubuntu 1604 пробовал по инструкциям от сюда https://software

131