Task 5
This commit is contained in:
44
task5.cpp
Normal file
44
task5.cpp
Normal file
@@ -0,0 +1,44 @@
|
||||
#include <iostream>
|
||||
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user