Úvod do řazení v Java
Pokud jste programátor, musíte už o slyšení hodně slyšet. Třídění je v zásadě uspořádání prvků ve vzestupném nebo sestupném pořadí. K dispozici je tolik třídicích algoritmů pro třídění prvků a každý algoritmus má různé způsoby třídění, různou složitost. Závisí to tedy na konkrétním scénáři a počtu prvků, které algoritmy by se měly použít. Vkládání je také jedním z běžně používaných třídicích algoritmů, které mají složitost O (n 2) obecně, a provádí se, jako když třídíme hrací karty v našich rukou. V tomto tématu se chystáme dozvědět o Insertion Sort in Java.
Jak funguje řazení v Java?
Pojďme pochopit fungování řazení typu pomocí příkladu. Předpokládejme, že existuje pole se jménem arr, které má níže uvedené prvky:
10 5 8 20 30 2 9 7
Krok č. 1 - Třídění vložení začíná druhým prvkem pole, tj. 5, přičemž se vezme v úvahu první prvek pole sám o sobě. Nyní je prvek 5 porovnán s 10, protože 5 je menší než 10, takže 10 se posune o 1 polohu dopředu a 5 se vloží před něj.
Výsledné pole je nyní:
5 10 8 20 30 2 9 7
Krok # 2 - Nyní je prvek arr (2), tj. 8 porovnáván s prvkem arr (1), tj. 10. Protože 8 je menší než jeho předchozí prvek 10, je posunutý o jeden krok dopředu od své polohy a poté je ve srovnání s 5. Protože 8 je větší než 5, tak se za něj vkládá.
Výsledné pole je:
5 8 10 20 30 2 9 7
Krok 3 - Nyní je prvek 20 porovnán s 10, protože je větší než 10, zůstává ve své poloze.
5 8 10 20 30 2 9 7
Krok # 4 - Prvek 30 je porovnán s 20, a protože je větší než 20, nedojde k žádným změnám a pole zůstane tak, jak je. Teď by pole bylo
5 8 10 20 30 2 9 7
Krok č. 5 - Prvek 2 je porovnán s 30, protože je menší než 30, je posunut o jednu pozici dopředu, pak je porovnán s 20, 10, 8, 5, jeden po druhém a všechny prvky jsou posunuty do 1 pozice dopředu a 2 se vkládá před 5.
Výsledné pole je:
2 5 8 10 20 30 9 7
Krok # 6 - Prvek 9 je porovnáván s 30, protože je menší než 30, je porovnáván s 20, 10 jeden po druhém a prvek je posunut o 1 pozici dopředu a 9 je vložen před 10 a za 8. Výsledné pole je:
2 5 8 9 10 20 30 7
Krok # 7 - Prvek 7 je porovnán s 30, a protože je menší než 30, je porovnán s 30, 20, 10, 9, 8 a všechny prvky jsou posunuty o jednu pozici dopředu po jedné a 7 je vloženo před 8 Výsledné pole by se stalo:
2 5 7 8 9 10 20 30
Tímto způsobem jsou všechny prvky pole seřazeny podle řazení vložení, které začíná porovnávání s předchozím prvkem.
Příklady implementace třídění vložení v Javě
Insertion Sort in Java je jednoduchý třídicí algoritmus vhodný pro všechny malé datové sady.
public class InsertionSort (
public static void insertionSort(int arr()) ( for (int j = 1; j < arr.length; j++) ( int key = arr(j); int i = j-1;
while ( (i > -1) && ( arr(i) > key ) ) ( arr(i+1) = arr(i); i--; )
arr(i+1) = key;
)
)
static void printArray(int arr()) ( int len = arr.length;
//simple for loop to print the elements of sorted array for (int i= 0; i System.out.print(arr(i) + " " );
System.out.println();
)
public static void main(String args())( int() arr1 = (21, 18, 15, 23, 52, 12, 61);
//calling the sort function which performs insertion sort insertionSort(arr1);
//calling the printArray function which performs printing of array printArray(arr1);
)
)public class InsertionSort (
public static void insertionSort(int arr()) ( for (int j = 1; j < arr.length; j++) ( int key = arr(j); int i = j-1;
while ( (i > -1) && ( arr(i) > key ) ) ( arr(i+1) = arr(i); i--; )
arr(i+1) = key;
)
)
static void printArray(int arr()) ( int len = arr.length;
//simple for loop to print the elements of sorted array for (int i= 0; i System.out.print(arr(i) + " " );
System.out.println();
)
public static void main(String args())( int() arr1 = (21, 18, 15, 23, 52, 12, 61);
//calling the sort function which performs insertion sort insertionSort(arr1);
//calling the printArray function which performs printing of array printArray(arr1);
)
)
Výstup:
12 15 18 21 23 52 61
Vysvětlení:
Ve výše uvedeném programu Insertion Sort se funkce inserttionSort () používá k třídění prvků původního pole. Třídění začíná od druhého prvku, protože první prvek se považuje za tříděný sám o sobě. Smyčka 'j' tedy začíná indexem 1 pole. „i“ je proměnná sledující index těsně před „j“, aby se hodnota mohla porovnat. “ key 'je proměnná, která drží hodnotu aktuálního prvku, který má být uspořádán v tříděné poloze. while () je prováděna smyčka, pokud je aktuální hodnota menší než hodnota vlevo, takže lze zpracovat posunutí prvků a na konci vložení aktuálního prvku do správné polohy. Funkce printArray () se používá pro konečný tisk seřazeného pole.
1. Nejlepší případ
Při řazení je nejlepší případ, když jsou všechny prvky pole již seřazeny. Když je tedy jakýkoli prvek porovnán s prvkem nejvíce vlevo, je vždy větší, a proto nebude zpracováno žádné posouvání a vkládání prvků. V tomto případě by nejlepší složitost případu byla lineární, tj. O (n).
2. Nejhorší případ
Ve výše uvedeném kódu řazení je nejhorší případ, když je pole v opačném pořadí, takže pokaždé, když je prvek porovnán s jeho nejlevějším prvkem, je vždy menší a poté ve srovnání se všemi pokračujícími prvky, které se odehrávají a posouvají a vložení je hotovo. V tomto případě je složitost řazení typu O (n 2).
3. Průměrný případ
Dokonce i v průměrném případě má řazení typu O (n 2) složitost, ve které některé prvky nevyžadují řazení, zatímco některé prvky jsou posunuty ze svých pozic a je prováděno vkládání na správné pozici.
4. Nejlepší využití
Třídění vložení je nejlepší použít, když velikost pole není příliš velká nebo je třeba třídit pouze malý počet prvků, ve kterých jsou tříděny téměř všechny prvky a je třeba provést pouze některé změny. Třídění vložení je jedním z nejrychlejších algoritmů pro pole malých velikostí ještě rychlejší než Rychlé řazení. Quicksort ve skutečnosti používá řazení třídění při třídění malých částí pole.
Závěr
Výše uvedené vysvětlení jasně ukazuje fungování a implementaci řazení v Java. I v jiných programovacích jazycích zůstane logika pro provedení třídění vložení stejná, pouze změny syntaxe. Před implementací jakéhokoli třídicího algoritmu je velmi důležité provést nějakou analýzu scénáře, kde je třeba provést třídění, protože ne každý třídicí algoritmus se hodí do všech scénářů.
Doporučené články
Toto je průvodce třídením vložení v Javě. Zde diskutujeme, jak funguje řazení v jazyce Java s příklady implementace řazení v jazyce Java. Další informace naleznete také v následujících článcích -
- Square Root v Javě
- BorderLayout v Javě
- Reverzní číslo v Javě
- StringBuffer v Javě
- Square Root v PHP
- Square Root v JavaScriptu
- Průvodce top 6 třídících algoritmů v Pythonu