Дан массив, состоящий из size целочисленных элементов.
Упорядочить элементы массива методом Шелла.
C/C++
Сортировка элементов массива методом Шелла
#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;
}

#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;
}

#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");
}
#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");
}
Главная деталь в твоём автомобиле
Похожие вопросы
- Проблемы с сортировкой массива методом пузырька.
- Заменить нулями элементы массива, которые расположены между первым минимальным и последним максимальным элементами масси
- Создать одномерный массив, состоящий из n вещественных элементов. Элементы массива определить при помощи случайных чисел
- Язык Си. Сортировка и поиск элементов массива
- В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму элементов массива
- Вычислить произведение нечетных элементов массива В с++
- Можно ли через функцию memset записать число в элемент массива больше чем 255? (Си)
- Упорядочить элементы массива по возрастанию на языке Си
- Найти произведение элементов массива а, состоящего из 25 целых чисел, кратных 2 на Паскаль
- Как удалить элемент массива в C++