Пример программы сортировки Heap Sort на C#

В этом примере мы обсудим алгоритм сортировки кучи на C# он делит свои входные данные на сортированную и несортированную область, и он итеративно сжимает несортированную область, извлекая самый большой элемент и перемещая его в сортированную область.

Сначала он удаляет самый верхний элемент (самый большой) и заменяет его самым правым. Самый верхний элемент хранится в массиве и восстанавливает кучу, это выполняется до тех пор, пока в куче не останется больше элементов.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace heapsort
{
  /*
 * C# Program to Heap Sort
 */
    using System;
    class Heapsort
    {
        int[] r = { 2, 5, 1, 10, 6, 9, 3, 7, 4, 8 };
        public void Hsort()
        {
            int i, t;
            for (i = 5; i >= 0; i--)
            {
                Adjust(i, 9);
            }
            for (i = 8; i >= 0; i--)
            {
                t = r[i + 1];
                r[i + 1] = r[0];
                r[0] = t;
                Adjust(0, i);
            }
        }
        private void Adjust(int i, int n)
        {
            int t, j;
            try
            {
                t = r[i];
                j = 2 * i;
                while (j <= n)
                {
                    if (j < n && r[j] < r[j + 1])
                        j++;
                    if (t >= r[j])
                        break;
                    r[j / 2] = r[j];
                    j *= 2;
                }
                r[j / 2] = t;
            }
            catch (IndexOutOfRangeException e)
            {
                Console.WriteLine("Массив выходит за границы ", e);
            }
        }
        public void Print()
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("{0}", r[i]);
            }

        }
        public static void Main()
        {
            Heapsort obj = new Heapsort();
            Console.WriteLine("Элементы перед сортировкой : ");
            obj.Print();
            obj.Hsort();
            Console.WriteLine("Элементы после сортировки : ");
            obj.Print();
            Console.Read();
        }
    }
}

 

Вывод:

Элементы перед сортировкой :
2
5
1
10
6
9
3
7
4
8
Элементы после сортировки :
1
2
3
4
5
6
7
8
9
10

Обновлено: 07.01.2020 — 13:05

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.