insertion sort java insertion sort algorithm examples
Tento výukový program vysvětluje třídění vkládání v Javě, včetně jeho algoritmu, pseudokódu a příkladů řadicích polí, jednotlivě propojených a dvojitě propojených seznamů:
Technika Algorithm Insertion Sort Algorithm je podobná Bubble sortu, ale je o něco efektivnější. Třídění vložení je proveditelnější a efektivnější, když se jedná o malý počet prvků. Když je datová sada větší, seřízení dat bude trvat déle.
=> Prohlédněte si příručku Java Beginners Guide zde.
nejlepší bezplatný databázový software pro Windows
Co se naučíte:
Úvod do vkládání Seřadit v Javě
V technice třídění vložení předpokládáme, že první prvek v seznamu je již seřazen a začneme druhým prvkem. Druhý prvek se porovná s prvním a vymění se, pokud není v pořádku. Tento proces se opakuje pro všechny následující prvky.
Obecně technika třídění vkládání porovnává každý prvek se všemi jeho předchozími prvky a třídí prvek tak, aby jej umístil do správné polohy.
Jak již bylo zmíněno, technika řazení Insertion je proveditelnější pro menší sadu dat, a proto lze pole s malým počtem prvků řadit pomocí efektivního řazení Insertion.
Třídění vložení je zvláště užitečné při třídění datových struktur propojeného seznamu. Jak víte, propojené seznamy mají ukazatele ukazující na jeho další prvek (jednotlivě propojený seznam) a předchozí prvek (seznam s dvojitým propojením). Díky tomu je snazší sledovat předchozí a následující prvky.
Je tedy snazší použít třídění vložení pro třídění propojených seznamů. Pokud je datových položek více, bude třídění trvat hodně času.
V tomto kurzu se budeme zabývat technikou třídění vložení včetně jejího algoritmu, pseudokódu a příkladů. Budeme také implementovat programy Java pro třídění pole, Singly linked list a Doubly linked list using Insertion sort.
Algoritmus třídění vložení
Algoritmus třídění vkládání je následující.
Krok 1 : Opakujte kroky 2 až 5 pro K = 1 až N-1
Krok 2 : nastavená teplota = A (K)
Krok 3 : nastavení J = K - 1
Krok 4 :
Opakujte při teplotě<=A(J)
množina A (J + 1) = A (J)
množina J = J - 1
(konec vnitřní smyčky)
Krok 5 :
sada A (J + 1) = tepl
(konec smyčky)
Krok 6 : výstup
Jak víte, třídění vkládání začíná od druhého prvku za předpokladu, že první prvek je již seřazen. Výše uvedené kroky se opakují pro všechny prvky v seznamu od druhého prvku a dále do požadované polohy.
Pseudokód pro třídění vkládání
Níže je uveden pseudokód pro techniku třídění vkládání.
procedure insertionSort(array,N ) array – array to be sorted N- number of elements begin int freePosition int insert_val for i = 1 to N -1 do: insert_val = array(i) freePosition = i //locate free position to insert the element while freePosition > 0 and array(freePosition -1) > insert_val do: array (freePosition) = array (freePosition -1) freePosition = freePosition -1 end while //insert the number at free position array (freePosition) = insert_val end for end procedure
Dále se podívejme na ilustraci, která ukazuje řazení pole pomocí třídění vložení.
Třídění pole pomocí třídění podle vložení
Vezměme si příklad třídění Insertion pomocí pole.
Pole, které se má třídit, je následující:
Nyní pro každý průchod porovnáme aktuální prvek se všemi jeho předchozími prvky. Takže v prvním průchodu začneme s druhým prvkem.
Proto potřebujeme N počet průchodů, abychom kompletně roztřídili pole obsahující N počet prvků.
selen otázky k pohovoru na 3 roky zkušeností
Výše uvedený obrázek lze shrnout do tabulky, jak je uvedeno níže:
Složit | Nezařazený seznam | srovnání | Seřazený seznam |
---|---|---|---|
jeden | {10,2,6,15,4,1} | {10,2} | {2,10, 6,15,4,1} |
dva | {2,10, 6,15,4,1} | {2,10, 6} | {2,6,10,15,4,1} |
3 | {2,6,10,15,4,1} | {2.6, 10.15} | {2,6,10,15,4,1} |
4 | {2,6,10,15,4,1} | {2.6, 10.15.4} | {2,4,6,10,15,1} |
5 | {2,4,6,10,15,1} | {2,4,6,10,15,1} | {1,2,4,6, 10,15} |
6 | {} | {} | {1,2,4,6, 10,15} |
Jak je znázorněno na obrázku výše, na konci každého průchodu jde jeden prvek na správné místo. Obecně tedy, abychom umístili N prvků na jejich správné místo, potřebujeme průchody N-1.
Implementace třídění vkládání v Javě
Následující program ukazuje implementaci třídění Insertion v Javě. Zde máme pole, které se má třídit pomocí třídění Vložení.
import java.util.*; public class Main { public static void main(String() args) { //declare an array and print the original contents int() numArray = {10,6,15,4,1,45}; System.out.println('Original Array:' + Arrays.toString(numArray)); //apply insertion sort algorithm on the array for(int k=1; k=0 && temp <= numArray(j)) { numArray(j+1) = numArray(j); j = j-1; } numArray(j+1) = temp; } //print the sorted array System.out.println('Sorted Array:' + Arrays.toString(numArray)); } }
Výstup:
Původní pole: (10, 6, 15, 4, 1, 45)
Řazené pole: (1, 4, 6, 10, 15, 45)
Ve výše uvedené implementaci je vidět, že třídění začíná od 2ndprvek pole (proměnná smyčky j = 1) a poté se aktuální prvek porovná se všemi jeho předchozími prvky. Prvek se poté umístí do správné polohy.
Třídění vložení funguje efektivně pro menší pole a pro pole, která jsou částečně tříděna, kde je třídění dokončeno za méně průchodů.
Řazení vložení je stabilní řazení, tj. Udržuje pořadí stejných prvků v seznamu.
Třídění propojeného seznamu pomocí třídění podle vložení
Následující program Java ukazuje třídění jednotlivě propojeného seznamu pomocí třídění Insertion.
import java.util.*; class Linkedlist_sort { node head; node sorted; //define node of a linked list class node { int val; node next; public node(int val) { this.val = val; } } //add a node to the linked list void add(int val) { //allocate a new node node newNode = new node(val); //link new node to list newNode.next = head; //head points to new node head = newNode; } // sort a singly linked list using insertion sort void insertion_Sort(node headref) { // initially, no nodes in sorted list so its set to null sorted = null; node current = headref; // traverse the linked list and add sorted node to sorted list while (current != null) { // Store current.next in next node next = current.next; // current node goes in sorted list Insert_sorted(current); // now next becomes current current = next; } // update head to point to linked list head = sorted; } //insert a new node in sorted list void Insert_sorted(node newNode) { //for head node if (sorted == null || sorted.val >= newNode.val) { newNode.next = sorted; sorted = newNode; } else { node current = sorted; //find the node and then insert while (current.next != null && current.next.val Výstup:
Původní propojený seznam:
1 8 32 2 10
Seřazený propojený seznam:
1 2 8 10 32

Ve výše uvedeném programu jsme definovali třídu, která vytváří propojený seznam a přidává do něj uzly a také je třídí. Protože jednotlivě propojený seznam má další ukazatel, je snazší sledovat seznam uzlů při řazení seznamu.
Třídění dvojitě propojeného seznamu pomocí třídění podle vložení
Následující program třídí dvojitě propojený seznam pomocí třídění vložení. Všimněte si, že protože dvojitě propojený seznam má jak předchozí, tak následující ukazatele, je snadné aktualizovat a znovu spojit ukazatele při třídění dat.
class Main { // doubly linked list node static class Node { int data; Node prev, next; }; // return a new node in DLL static Node getNode(int data){ //create new node Node newNode = new Node(); // assign data to node newNode.data = data; newNode.prev = newNode.next = null; return newNode; } // insert a node in sorted DLL static Node insert_Sorted(Node head_ref, Node newNode) { Node current; //list is empty if (head_ref == null) head_ref = newNode; // node is inserted at the beginning of the DLL else if ((head_ref).data >= newNode.data) { newNode.next = head_ref; newNode.next.prev = newNode; head_ref = newNode; } else { current = head_ref; // find the node after which new node is to be inserted while (current.next != null && current.next.data prev points to new node / if ((head_ref) != null) (head_ref).prev = newNode; // move the head to point to the new node / (head_ref) = newNode; return head_ref; } public static void main(String args()) { // create empty DLL Node head = null; // add nodes to the DLL head=addNode(head, 5); head=addNode(head, 3); head=addNode(head, 7); head=addNode(head, 2); head=addNode(head, 11); head=addNode(head, 1); System.out.println( 'Original doubly linked list:'); print_DLL(head); head=insertion_Sort(head); System.out.println('
Sorted Doubly Linked List:'); print_DLL(head); } }
Výstup:
Původní dvojitě propojený seznam:
1 11 2 7 3 5
Seřazený dvojitě propojený seznam:
1 2 3 5 7 11

Často kladené otázky
Otázka č. 1) Co je Insertion Sort v Javě?
jak otevřít soubor jar s java
Odpovědět: Insertion sort je jednoduchá technika třídění v Javě, která je efektivní pro menší datový soubor a na místě. Předpokládá se, že první prvek je vždy seřazen a poté je každý následující prvek porovnán se všemi svými předchozími prvky a umístěn do správné polohy.
Otázka č. 2) Proč je řazení vložení lepší?
Odpovědět: Třídění vkládání je u menších datových sad rychlejší, když ostatní techniky, jako je rychlé třídění, přidávají režii prostřednictvím rekurzivních volání. Třídění vložení je poměrně stabilnější než ostatní třídicí algoritmy a vyžaduje méně paměti. Třídění vložení funguje také efektivněji, když je pole téměř tříděno.
Otázka č. 3) K čemu se používá třídění vložení?
Odpovědět: Třídění vložení se většinou používá v počítačových aplikacích, které vytvářejí složité programy, jako je vyhledávání souborů, hledání cest a komprese dat.
Otázka č. 4)Jaká je účinnost řazení?
Odpovědět: Třídění vložení má průměrný výkon případu O (n ^ 2). Nejlepším případem pro třídění vložení je situace, kdy je pole již tříděno a je O (n). Nejhorší výkon pro třídění vložení je opět O (n ^ 2).
Závěr
Řazení vložení je jednoduchá technika řazení, která funguje na polích nebo propojených seznamech. Je užitečné, když je soubor dat menší. Jak se datová sada zvětšuje, tato technika se stává pomalejší a neúčinnější.
Třídění Vložení je také stabilnější a na místě než jiné techniky řazení. Neexistuje žádná režie paměti, protože pro ukládání seřazených prvků se nepoužívá žádná samostatná struktura.
Třídění vložení funguje dobře při třídění propojených seznamů, které jsou jednotlivě i dvojnásobně propojené. Důvodem je, že propojený seznam je tvořen uzly, které jsou propojeny pomocí ukazatelů. Proto je třídění uzlů snazší.
V našem nadcházejícím tutoriálu probereme ještě další techniku třídění v Javě.
=> Přečtěte si řadu Easy Java Training Series.
Doporučené čtení
- Výběr řazení v Javě - Algoritmus řazení a příklady výběru
- Řazení vložení v C ++ s příklady
- Jak řadit pole v Javě - návod s příklady
- Metoda MongoDB Sort () s příklady
- Unixový příkaz pro řazení se syntaxí, možnostmi a příklady
- Shell Seřadit v C ++ s příklady
- Výukový program pro rozhraní Java a abstraktní třídu s příklady
- Výběr Seřadit v C ++ s příklady