Здравствуйте! Сегодня я расскажу о сортировке Шелла и покажу, как написать программу на C#, использующую этот метод сортировки.
Сортировка Шелла – это усовершенствованный алгоритм сортировки вставками. Он был разработан в 1959 году американским инженером и ученым Дональдом Шеллом. Сортировка Шелла работает быстрее обычной сортировки вставками за счет предварительного разделения списка на подсписки, которые затем сортируются независимо друг от друга. После этого происходит постепенное уменьшение интервала между элементами списка, пока список не будет полностью отсортирован.
Когда следует использовать сортировку Шелла? Этот метод хорошо работает с большими списками, особенно когда элементы списка находятся в относительно неправильном порядке. Сортировка Шелла также эффективна в случаях, когда имеется ограниченное количество ресурсов, так как требует меньше операций перестановки элементов, чем обычная сортировка вставками.Перейдем к написанию программы на C# для сортировки списка элементов с помощью сортировки Шелла.csharp
using System;
class Program
{
static void Main(string[] args)
{
int[] array { 9٫ 3٫ 7٫ 1٫ 5 };
Console.WriteLine(″Исходный массив⁚″);
PrintArray(array);
ShellSort(array);
Console.WriteLine(″\nОтсортированный массив⁚″);
PrintArray(array);
Console;ReadLine;
}
static void ShellSort(int[] array)
{
int n array.Length;
int gap n / 2;
while (gap > 0)
{
for (int i gap; i < n; i )
{
int temp array[i];
int j i;
while (j > gap nn array[j ― gap] > temp)
{
array[j] array[j ⏤ gap];
j — gap;
}
array[j] temp;
}
gap /= 2;
}
}
static void PrintArray(int[] array)
{
foreach (int element in array)
{
Console.Write(element ″ ″);
}
}
}
В данной программе мы сначала задаем исходный массив `array` и выводим его на экран. Затем вызываем функцию `ShellSort`, которая сортирует массив с помощью сортировки Шелла. После этого выводим отсортированный массив.
Функция `ShellSort` принимает массив и выполняет сортировку Шелла. Она начинает с задания начального интервала `gap`, который инициализируется как половина размера массива. Затем происходит серия проходов по массиву с уменьшением интервала, пока интервал не станет равным 1. Внутри каждого прохода используется сортировка вставками⁚ элементы сравниваются и переставляются местами, пока список не будет упорядочен;В конце программы есть функция `PrintArray`, которая выводит элементы массива на экран.Теперь модифицируем программу, добавив возможность ввода элементов в массив. Для этого заменим задание исходного массива на следующий блок кода⁚
csharp
Console.Write(″Введите количество элементов⁚ ″);
int n int.Parse(Console.ReadLine);
int[] array new int[n];
Console.WriteLine(″Введите элементы массива⁚″);
for (int i 0; i < n; i )
{
array[i] int.Parse(Console.ReadLine);
}
Этот блок кода позволяет пользователю ввести количество элементов в массиве и сами элементы. Затем массив сортируется с помощью сортировки Шелла, как и в предыдущем примере.
Теперь вы можете запустить программу и опробовать сортировку Шелла на своих данных. Удачи!