diff --git a/task5.cpp b/task5.cpp new file mode 100644 index 0000000..62ac55a --- /dev/null +++ b/task5.cpp @@ -0,0 +1,44 @@ +#include + +int shellSort(int arr[], int n) +{ + // Сортировка Шелла + + for (int gap = n/2; gap > 0; gap /= 2) + { + // Выполнение промежуточной сортировки вставками. + for (int i = gap; i < n; i += 1) + { + // Сохраняем элемент arr[i] во временной переменной temp, + // чтобы на этой позиции можно было оставить "отверстие". + int temp = arr[i]; + + // Передвигаем ранее отсортированные элементы выше, + // пока не будет найдена правильная позиция для a[i] + int j; // Объявляем j здесь, т.к. позже еще будет нужна + for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) + { + // Сдвигаем ранее отсортированные элементы. + // "Отверстие" позволяет это сделать. + arr[j] = arr[j - gap]; + } + // Помещаем сохраненный элемент в его правильную позицию + arr[j] = temp; + } + } + return 0; +} + +int main() +{ + int arr[] = {12, 11, 13, 5, 6}; + int n = sizeof(arr) / sizeof(arr[0]); + + shellSort(arr, n); + + for (int i = 0; i < n; i++) + { + std::cout << arr[i] << " "; + } + std::cout << std::endl; +}