C/C++

Сортировка элементов массива методом Шелла

Дан массив, состоящий из size целочисленных элементов.
Упорядочить элементы массива методом Шелла.
#include <stdio.h>
#include <unistd.h>
#define size 10

int shell_sort(int []);

int main()
{
int arr[size], i;
printf("Enter %d elements to be sorted:\n",size);
for (i = 0;i < size;i++)
{
scanf("%d", &arr[i]);
}
shell_sort(arr);
printf("The array after sorting is:");
for (i = 0;i < size;i++)
{
printf("\n%d", arr[i]);
}
sleep(10);//пауза
return 0;
}

/* сортировка методом Шелла: */
int shell_sort(int array[])
{
int i = 0, j = 0, k = 0, mid = 0;
for (k = size / 2;k > 0;k /= 2)
{
for (j = k;j < size;j++)
{
for (i = j - k;i >= 0;i -= k)
{
if (array[i + k] >= array[i])
{
break;
}
else
{
mid = array[i];
array[i] = array[i + k];
array[i + k] = mid;
}
}
}
}
return 0;
}
ДЕ
Данилов Евгений
37 945
Лучший ответ
#include <iostream>
#include <iomanip>
#include <random>
using namespace std;
template<typename Iterator, typename Compare>
void sort_shell(Iterator first, Iterator last, Compare comp) {
for (auto d = (last - first) >> 1; d != 0; d >>= 1)
for (auto i = first + d; i != last; ++i)
for (auto j = i; j - first >= d && comp(*j, *(j - d)); j -= d)
iter_swap(j, (j - d));
}
void fill(int* box, size_t size) {
uniform_int_distribution<> uid(1, 100);
mt19937 gen{ random_device()() };
for (auto i = 0U; i < size; ++i) box[i] = uid(gen);
}
void show(int* box, size_t size) {
for (auto i = 0U; i < size; ++i) cout << setw(4) << box[i];
puts("");
}
int main() {
cout << "Size: ";
size_t size;
cin >> size;
auto box = new int[size];
fill(box, size);
show(box, size);
sort_shell(box, box + size, less<>());
show(box, size);
delete[] box;
system("pause > nul");
}
Главная деталь в твоём автомобиле