
Привет! Сегодня я хочу поделиться с вами своим опытом написания программы на C# для сортировки списка элементов с помощью сортировки Шелла.
Сортировка Шелла ― это алгоритм сортировки, разработанный в 1959 году американским инженером Дональдом Шеллом. Этот алгоритм относится к семейству алгоритмов сортировки вставками٫ но имеет определенные модификации٫ которые позволяют ему работать гораздо быстрее.Основная идея сортировки Шелла заключается в том٫ чтобы сначала разделить список на подсписки и отсортировать каждый из них с помощью сортировки вставками. Затем комбинируются подсписки٫ уменьшая шаг на каждой итерации٫ пока весь список не будет отсортирован.Давайте начнем с написания функции сортировки Шелла для заданного массива. Вот код⁚
csharp
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;
}
}
Эта функция принимает массив элементов типа int и сортирует его с помощью сортировки Шелла. Мы начинаем с задания шага равного половине размера массива и последовательно уменьшаем шаг в два раза на каждой итерации. Затем мы итерируемся по массиву и сравниваем элементы на расстоянии шага. Если элементы в неправильном порядке, мы меняем их местами. После того, как прошли по всем элементам, уменьшаем шаг и продолжаем процесс до тех пор, пока шаг не станет равным 0.
Теперь давайте добавим возможность ввода элементов в массив. Вот измененный код⁚
csharp
static void Main(string[] args)
{
Console.WriteLine(″Введите количество элементов в массиве⁚″);
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);
}
ShellSort(array);
Console.WriteLine(″Отсортированный массив⁚″);
foreach (int element in array)
{
Console.Write($″{element} ″);
}
}
Теперь программа будет запрашивать у пользователя количество элементов в массиве и считывать элементы с консоли. Затем она вызывает функцию сортировки Шелла и выводит отсортированный массив на экран.
Вот и все! Теперь у вас есть полноценная программа на C#, которая сортирует список элементов с помощью сортировки Шелла. Удачи в использовании этого алгоритма в ваших проектах!