Вступ до сортування купи в Java

Heapsort на Java - це метод сортування на основі порівняння, де використовується структура даних Binary Heap. Це сортування майже те саме, що і сортування вибору, де буде обраний найбільший елемент і розміщений в кінці, і процес буде повторений для всіх елементів. Для того, щоб зрозуміти сортування Heap, давайте подивимось, що таке Binary Heap Sort у Java.

  • Структура даних на основі дерева.
  • Повне бінарне дерево.
  • У ньому може бути до двох дітей.
  • Значення в кореневому вузлі може бути більшим (Max Heap) або Меншим (Min Heap)

Як працює сортування Heap на Java?

Перш ніж перейти до алгоритму, давайте подивимося, що таке Heapify.

Надихати

Після створення купи із вхідними даними, властивість купи може бути задоволена. Для того, щоб досягти цього, для регулювання вузлів купи буде використовуватися функція, яка називається "hepify". Якщо ми хочемо створити максимальну купу, поточний елемент буде порівнюватися з його дітьми, і якщо значення дітей буде більшим за поточний елемент, заміна буде здійснена з найбільшим елементом у лівій або правій дочірній. Аналогічно, якщо потрібно створити міні-купу, заміна буде зроблена з найменшим елементом у лівій або правій дочці. Наприклад, наступним є наш вхідний масив,

Ми можемо розглядати це як дерево замість масиву. Перший елемент буде корінним, другий - лівим дочірнім коренем, третій елемент - правильним дочірнім коренем тощо.

Для того, щоб перетворити купу в дерево, обведіть дерево в напрямку знизу вгору. Оскільки у листових вузлів немає дітей, давайте розглянемо наступний рівень. тобто 5 і 7.

Ми можемо почати о 5, як це зліва. Тут 5 має двох дітей: 9 і 4, де 9 більше, ніж батьківський вузол 5. Щоб зробити батьків більшими, ми поміняємо місцями 5 і 9. Після заміни дерево буде таким, як показано нижче.

Перейдемо до наступного елемента 7, де 8 та 2 - діти. Аналогічно елементам 9 і 4, 7 і 8 будуть замінені, як у дереві нижче.

Нарешті, у 3 є двоє дітей - 9 і 8, де 9 більше серед дітей та коренів. Отже, буде зроблено заміну 3 та 9, щоб зробити корінь більшим. Повторіть процес, поки не сформується дійсна купа, як показано нижче.

Алгоритм сортування купи в порядку зростання

  1. Створіть Max Heap із вхідними даними
  2. Замініть останній елемент найбільшим елементом у купі
  3. Оточіть дерево
  4. Повторюйте процес, поки масив не буде відсортований

Алгоритм породження сортування в порядку зменшення

  1. Створіть Min Heap із вхідними даними
  2. Замініть останній елемент найменшим елементом у купі
  3. Оточіть дерево
  4. Повторюйте процес, поки масив не буде відсортований

Тепер спробуємо сортувати вищезгадану Кучу у порядку зростання за допомогою заданого алгоритму. Спочатку видаліть найбільший елемент. тобто корінь і замініть його останнім елементом.

Тепер, нагрійте утворене дерево та вставіть вилучений елемент в останній масив, як показано нижче

Знову ж видаліть кореневий елемент, замініть його останнім елементом і надішліть його.

Вставте вийнятий елемент у вільне місце. Тепер ви бачите, що кінець масиву сортується.

Тепер видаліть елемент 7 і замініть його на 2.

Нагрійте дерево, як показано нижче.

Повторюйте процес, поки масив не буде відсортований. Видалення елемента 5.

Утеплення дерева.

Видалення елемента 4.

Знову зіткнувшись.

Нарешті буде сформований такий сортований масив, як цей.

Приклади для здійснення сортування купи в Java

Тепер давайте подивимось вихідний код сортування Heap на Java

//Java program to sort the elements using Heap sort
import java.util.Arrays;
public class HeapSort (
public void sort(int array()) (
int size = array.length; //Assigning the length of array in a variable
// Create heap
for (int i = size / 2 - 1; i >= 0; i--)
heapify(array, size, i);
//Find the maximum element and replace it with the last element in the array
for (int i=size-1; i>=0; i--) (
int x = array(0);//largest element(It is available in the root)
array(0) = array(i);
array(i) = x;
// Recursively call heapify until a heap is formed
heapify(array, i, 0);
)
)
// Heapify function
void heapify(int array(), int SizeofHeap, int i) (
int largestelement = i; // Set largest element as root
int leftChild = 2*i + 1; // index of left child = 2*i + 1
int rightChild = 2*i + 2; //index of right child = 2*i + 2
// left child is greater than root
if (leftChild array(largestelement))
largestelement = leftChild ;
//right child is greater than largest
if (rightChild array(largestelement))
largestelement = rightChild ;
// If largestelement is not root
if (largestelement != i) (
int temp = array(i);
array(i) = array(largestelement);
array(largestelement) = temp;
// Recursive call to heapify the sub-tree
heapify(array, SizeofHeap, largestelement);
)
)
public static void main(String args()) (
int array() = (3, 5, 7, 9, 4, 8, 2);
System. out .println("Input array is: " + Arrays. toString (array));
HeapSort obj = new HeapSort();
obj.sort(array);
System. out .println("Sorted array is : " + Arrays. toString (array));
)
)

Вихід

Висновок

Heap Sort - це метод сортування, який залежить від структури даних Binary Heap Data. Він майже схожий на сортування селекції та не використовує окремі масиви для сортування та нагромадження.

Рекомендована стаття

Це був посібник із сортування Heap Sort на Java. Тут ми обговорюємо робочий, сортуючий алгоритм за порядком зростання та спадання та приклади з зразком коду. Ви також можете ознайомитися з іншими запропонованими нами статтями, щоб дізнатися більше -

  1. Функції JavaScript математики
  2. Макет на Java
  3. Компілятори Java
  4. Керівництво по злиття сортування в Java
  5. Посібник по сортуванню купи в С
  6. Приклади сортування купи в C ++