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