Сортування гнома (Gnome sort) – простий в реалізації алгоритм сортування масиву, названий на честь садового гнома, який в такий спосіб сортує садові горщики.

Принцип роботи алгоритму сортування Гнома

Алгоритм знаходить першу пару невідсортованих елементів масиву і міняє їх місцями. При цьому враховується факт, що обмін призводить до неправильного розміщення елементів, що межують з тільки що переставленими. Оскільки всі елементи масиву після переставлених не відсортовані, необхідно перевірити елементи тільки до переставлених.

Реалізація алгоритму сортування Гнома

using System;

class Program
{
    //метод для обміну елементів
    static void Swap(ref int item1, ref int item2)
    {
        var temp = item1;
        item1 = item2;
        item2 = temp;
    }

    //сортування Гнома
    static int[] GnomeSort(int[] unsortedArray)
    {
        var index = 1;
        var nextIndex = index + 1;

        while (index < unsortedArray.Length)
        {
            if (unsortedArray[index - 1] < unsortedArray[index])
            {
                index = nextIndex;
                nextIndex++;
            }
            else
            {
                Swap(ref unsortedArray[index - 1], ref unsortedArray[index]);
                index--;
                if (index == 0)
                {
                    index = nextIndex;
                    nextIndex++;
                }
            }
        }

        return unsortedArray;
    }

    static void Main(string[] args)
    {
        Console.WriteLine("Сортування Гнома");
        Console.Write("Введіть елементи масиву: ");
        var parts = Console.ReadLine().Split(new[] { " ", ",", ";" }, StringSplitOptions.RemoveEmptyEntries);
        var array = new int[parts.Length];
        for (int i = 0; i < parts.Length; i++)
        {
            array[i] = Convert.ToInt32(parts[i]);
        }

        Console.WriteLine("Відсортований масив: {0}", string.Join(", ", GnomeSort(array)));

        Console.ReadLine();
    }
}

Дивіться також: