logo

Rozdíl mezi řazením vložení a řazením výběru

Třídění vkládání a třídění výběru jsou dva oblíbené třídicí algoritmy a jejich hlavní rozdíl spočívá v tom, jak vybírají a umísťují prvky do seřazené sekvence.

Seřadit výběr:

  1. Při třídění výběru je vstupní pole rozděleno na dvě části: seřazenou část a neseřazenou část.
  2. Algoritmus opakovaně najde minimální prvek v neseřazené části a zamění jej s prvkem nejvíce vlevo v netříděné části, čímž rozšíří seřazenou část o jeden prvek.
  3. Výběrové řazení má ve všech případech časovou složitost O(n^2).

Řazení vložení:

  1. Při řazení vložení je vstupní pole také rozděleno na dvě části: seřazenou část a neseřazenou část.
    Algoritmus vybere prvek z neseřazené části a umístí jej na správnou pozici v seřazené části, přičemž větší prvky posune o jednu pozici doprava.
    Vložení řazení má časovou složitost O(n^2) v nejhorším případě, ale může fungovat lépe na částečně seřazených polích s časovou složitostí v nejlepším případě O(n).
    Hlavní rozdíly:
  2. Seřazení výběru prohledá neseřazenou část, aby nalezlo minimální prvek, zatímco řazení vložení prohledá seřazenou část, aby nalezlo správnou pozici pro umístění prvku.
    Výběrové řazení vyžaduje méně výměn než řazení vložení, ale více porovnání.
    Vložení řazení je efektivnější než výběrové řazení, když je vstupní pole částečně nebo téměř seřazeno, zatímco řazení výběru funguje lépe, když je pole vysoce neseřazené.
    Stručně řečeno, oba algoritmy mají podobnou časovou složitost, ale liší se jejich výběr a způsob umístění. Volba mezi nimi závisí na vlastnostech vstupních dat a specifických požadavcích daného problému.

Výhody řazení vložení:

  1. Jednoduché a snadno pochopitelné a implementovatelné.
  2. Efektivní pro malé soubory dat nebo téměř tříděná data.
  3. Algoritmus řazení na místě, což znamená, že nevyžaduje další paměť.
  4. Stabilní algoritmus třídění, což znamená, že zachovává relativní pořadí stejných prvků ve vstupním poli.

Nevýhody řazení vložení:

  1. Neefektivní pro velké soubory dat nebo data v obráceném pořadí, s časovou složitostí v nejhorším případě O(n^2).
  2. Řazení vkládání má mnoho swapů, což může na moderních počítačích zpomalit.

Výhody třídění výběru:

  1. Jednoduché a snadno pochopitelné a implementovatelné.
  2. Efektivní pro malé soubory dat nebo téměř tříděná data.
  3. Algoritmus řazení na místě, což znamená, že nevyžaduje další paměť.

Nevýhody výběru typu:

  1. Neefektivní pro velké soubory dat, s nejhorší časovou složitostí O(n^2).
  2. Výběrové řazení má mnoho srovnání, což může na moderních počítačích zpomalit.
  3. Nestabilní třídicí algoritmus, což znamená, že nemusí udržovat relativní pořadí stejných prvků ve vstupním poli.

V tomto článku probereme rozdíl mezi řazením vložení a řazením výběru:



Řazení vložení je jednoduchý třídící algoritmus, který funguje podobně jako způsob, jakým třídíte hrací karty v rukou. Pole je virtuálně rozděleno na seřazenou a neseřazenou část. Hodnoty z neseřazené části jsou vybrány a umístěny na správné místo v seřazené části.

Algoritmus:
Chcete-li seřadit pole o velikosti n vzestupně:

  • Iterujte z arr[1] do arr[n] přes pole.
  • Porovnejte aktuální prvek (klíč) s jeho předchůdcem.
  • Pokud je klíčový prvek menší než jeho předchůdce, porovnejte jej s prvky dříve. Posuňte větší prvky o jednu pozici nahoru, abyste vytvořili místo pro vyměněný prvek.

Níže je obrázek pro ilustraci řazení vložení:



vložení-třídění

Níže je uveden program pro totéž:

C++






// C++ program for the insertion sort> #include> using> namespace> std;> // Function to sort an array using> // insertion sort> void> insertionSort(>int> arr[],>int> n)> {> >int> i, key, j;> >for> (i = 1; i key = arr[i]; j = i - 1; // Move elements of arr[0..i-1], // that are greater than key to // one position ahead of their // current position while (j>= 0 && arr[j]> klíč) { arr[j + 1] = arr[j]; j = j-1; } arr[j + 1] = klíč; } } // Funkce pro tisk pole o velikosti N void printArray(int arr[], int n) { int i; // Vytiskne pole pro (i = 0; i cout<< arr[i] << ' '; } cout << endl; } // Driver Code int main() { int arr[] = { 12, 11, 13, 5, 6 }; int N = sizeof(arr) / sizeof(arr[0]); // Function Call insertionSort(arr, N); printArray(arr, N); return 0; }>

>

>

Jáva




// Java program for the above approach> import> java.util.*;> class> GFG> {> > // Function to sort an array using> // insertion sort> static> void> insertionSort(>int> arr[],>int> n)> {> >int> i, key, j;> >for> (i =>1>; i { key = arr[i]; j = i - 1; // Move elements of arr[0..i-1], // that are greater than key to // one position ahead of their // current position while (j>= 0 && arr[j]> klíč) { arr[j + 1] = arr[j]; j = j-1; } arr[j + 1] = klíč; } } // Funkce pro tisk pole o velikosti N static void printArray(int arr[], int n) { int i; // Vytiskne pole pro (i = 0; i System.out.print(arr[i] + ' '); } System.out.println(); } // Kód ovladače public static void main(String[ ] args) { int arr[] = { 12, 11, 13, 5, 6 } int N = arr.length // Volání funkce insertionSort(arr, N } } //); Tento kód je přidán code_hunt

> 




# Python 3 program for the insertion sort> # Function to sort an array using> # insertion sort> def> insertionSort(arr, n):> >i>=> 0> >key>=> 0> >j>=> 0> >for> i>in> range>(>1>,n,>1>):> >key>=> arr[i]> >j>=> i>-> 1> ># Move elements of arr[0..i-1],> ># that are greater than key to> ># one position ahead of their> ># current position> >while> (j>>=> 0> and> arr[j]>klíč):> >arr[j>+> 1>]>=> arr[j]> >j>=> j>-> 1> >arr[j>+> 1>]>=> key> # Function to print an array of size N> def> printArray(arr, n):> >i>=> 0> ># Print the array> >for> i>in> range>(n):> >print>(arr[i],end>=> )> >print>(>' '>,end>=> '')> # Driver Code> if> __name__>=>=> '__main__'>:> >arr>=> [>12>,>11>,>13>,>5>,>6>]> >N>=> len>(arr)> ># Function Call> >insertionSort(arr, N)> >printArray(arr, N)> > ># This code is contributed by bgangwar59.>

>

>

C#




// C# program for the above approach> using> System;> class> GFG> {> >// Function to sort an array using> >// insertion sort> >static> void> insertionSort(>int>[] arr,>int> n)> >{> >int> i, key, j;> >for> (i = 1; i { key = arr[i]; j = i - 1; // Move elements of arr[0..i-1], // that are greater than key to // one position ahead of their // current position while (j>= 0 && arr[j]> klíč) { arr[j + 1] = arr[j]; j = j-1; } arr[j + 1] = klíč; } } // Funkce pro tisk pole o velikosti N static void printArray(int[] arr, int n) { int i; // Vytiskne pole pro (i = 0; i { Console.Write(arr[i] + ' '); } Console.WriteLine(); } // kód ovladače static public void Main() { int[] arr = new int[] { 12, 11, 13, 5, 6 }; int N = arr.Length; // Volání funkce insertionSort(arr, N printArray(arr, N); přispěl Dharanendra L V>

>

>

Javascript




> // JavaScript program for the above approach> // Function to sort an array using> // insertion sort> function> insertionSort(arr,n)> {> >let i, key, j;> >for> (i = 1; i { key = arr[i]; j = i - 1; // Move elements of arr[0..i-1], // that are greater than key to // one position ahead of their // current position while (j>= 0 && arr[j]> klíč) { arr[j + 1] = arr[j]; j = j-1; } arr[j + 1] = klíč; } } // Funkce pro tisk pole o velikosti N function printArray(arr,n) { let i; // Vytiskne pole pro (i = 0; i document.write(arr[i] + ' '); } document.write(' '); } // Kód ovladače let arr=[12, 11 , 13, 5, 6] let N = arr.length; // Volání funkce insertionSort(arr, N);

> 

5 6 11 12 13>

The výběr řazení Algoritmus třídí pole opakovaným nalezením minimálního prvku (s ohledem na vzestupné pořadí) z neseřazené části a jeho umístěním na začátek. Algoritmus udržuje dvě podpole v daném poli.

  • Podpole je již seřazeno.
  • Zbývající podpole je neseřazeno.

V každé iteraci řazení výběru se vybere minimální prvek (s ohledem na vzestupné pořadí) z neseřazeného podpole a přesune se do seřazeného podpole.

Níže je uveden příklad vysvětlující výše uvedené kroky:

arr[] = 64 25 12 22 11 // Find the minimum element in arr[0...4] // and place it at beginning 11  25 12 22 64 // Find the minimum element in arr[1...4] // and place it at beginning of arr[1...4] 11 12  25 22 64 // Find the minimum element in arr[2...4] // and place it at beginning of arr[2...4] 11 12 22  25 64 // Find the minimum element in arr[3...4] // and place it at beginning of arr[3...4] 11 12 22 25  64>

Níže je uveden program pro totéž:

C++




// C++ program for implementation of> // selection sort> #include> using> namespace> std;> // Function to swap two number> void> swap(>int>* xp,>int>* yp)> {> >int> temp = *xp;> >*xp = *yp;> >*yp = temp;> }> // Function to implement the selection> // sort> void> selectionSort(>int> arr[],>int> n)> {> >int> i, j, min_idx;> >// One by one move boundary of> >// unsorted subarray> >for> (i = 0; i // Find the minimum element // in unsorted array min_idx = i; for (j = i + 1; j if (arr[j] min_idx = j; // Swap the found minimum element // with the first element swap(&arr[min_idx], &arr[i]); } } // Function to print an array void printArray(int arr[], int size) { int i; for (i = 0; i cout << arr[i] << ' '; } cout << endl; } // Driver Code int main() { int arr[] = { 64, 25, 12, 22, 11 }; int n = sizeof(arr) / sizeof(arr[0]); // Function Call selectionSort(arr, n); cout << 'Sorted array: '; // Print the array printArray(arr, n); return 0; }>

>

>

Jáva




// Java program for implementation of> // selection sort> import> java.util.*;> class> GFG> {> // Function to implement the selection> // sort> static> void> selectionSort(>int> arr[],>int> n)> {> >int> i, j, min_idx;> >// One by one move boundary of> >// unsorted subarray> >for> (i =>0>; i 1; i++) { // Find the minimum element // in unsorted array min_idx = i; for (j = i + 1; j if (arr[j] min_idx = j; // Swap the found minimum element // with the first element int temp = arr[min_idx]; arr[min_idx]= arr[i]; arr[i] = temp; } } // Function to print an array static void printArray(int arr[], int size) { int i; for (i = 0; i System.out.print(arr[i]+ ' '); } System.out.println(); } // Driver Code public static void main(String[] args) { int arr[] = { 64, 25, 12, 22, 11 }; int n = arr.length; // Function Call selectionSort(arr, n); System.out.print('Sorted array: '); // Print the array printArray(arr, n); } } // This code is contributed by aashish1995>

>

>

Python3




# Python3 program for implementation of> # selection sort> # Function to implement the selection> # sort> def> selectionSort(arr, n):> ># One by one move boundary of> ># unsorted subarray> >for> i>in> range>(n>-> 1>):> ># Find the minimum element> ># in unsorted array> >min_idx>=> i> >for> j>in> range>(i>+> 1>, n):> >if> (arr[j] min_idx = j # Swap the found minimum element # with the first element arr[min_idx], arr[i] = arr[i], arr[min_idx] # Function to print an array def printArray(arr, size): for i in range(size): print(arr[i], end = ' ') print() # Driver Code if __name__ == '__main__': arr = [64, 25, 12, 22, 11] n = len(arr) # Function Call selectionSort(arr, n) print('Sorted array: ') # Print the array printArray(arr, n) # This code is contributed by ukasp>

>

>

C#


jquery toto kliknutí



// C# program for implementation of> // selection sort> using> System;> public> class> GFG> {> // Function to implement the selection> // sort> static> void> selectionSort(>int> []arr,>int> n)> {> >int> i, j, min_idx;> >// One by one move boundary of> >// unsorted subarray> >for> (i = 0; i { // Find the minimum element // in unsorted array min_idx = i; for (j = i + 1; j if (arr[j] min_idx = j; // Swap the found minimum element // with the first element int temp = arr[min_idx]; arr[min_idx]= arr[i]; arr[i] = temp; } } // Function to print an array static void printArray(int []arr, int size) { int i; for (i = 0; i Console.Write(arr[i]+ ' '); } Console.WriteLine(); } // Driver Code public static void Main(String[] args) { int []arr = { 64, 25, 12, 22, 11 }; int n = arr.Length; // Function Call selectionSort(arr, n); Console.Write('Sorted array: '); // Print the array printArray(arr, n); } } // This code is contributed by gauravrajput1>

>

>

Javascript




> // Javascript program for implementation of> // selection sort> // Function to implement the selection> // sort> function> selectionSort(arr, n)> {> >let i, j, min_idx;> > >// One by one move boundary of> >// unsorted subarray> >for>(i = 0; i { // Find the minimum element // in unsorted array min_idx = i; for(j = i + 1; j if (arr[j] min_idx = j; // Swap the found minimum element // with the first element let temp = arr[min_idx]; arr[min_idx]= arr[i]; arr[i] = temp; } } // Function to print an array function printArray(arr, size) { let i; for(i = 0; i { document.write(arr[i] + ' '); } document.write(' '); } // Driver Code let arr = [ 64, 25, 12, 22, 11 ]; let n = arr.length; // Function Call selectionSort(arr, n); document.write('Sorted array: '); // Print the array printArray(arr, n); // This code is contributed by rag2127>

>

>

Výstup:

Sorted array: 11 12 22 25 64>

Tabulkový rozdíl mezi řazením vložení a řazením výběru:

Řazení vkládání Výběr Seřadit
1. Vloží hodnotu do předřazeného pole, aby se seřadila sada hodnot v poli. Vyhledá minimální / maximální počet ze seznamu a seřadí jej vzestupně / sestupně.
2. Je to stabilní třídicí algoritmus. Je to nestabilní třídicí algoritmus.
3. Časová složitost v nejlepším případě je Ω(N), když je pole již ve vzestupném pořadí. Má Θ(N2) v nejhorším a průměrném případě. V nejlepším případě má nejhorší případ a průměrné třídění výběru složitost Θ(N2).
4. Počet operací porovnání provedených v tomto třídicím algoritmu je menší než provedené odkládání. Počet porovnávacích operací provedených v tomto třídicím algoritmu je větší než provedené odkládání.
5. Je efektivnější než třídění Selection. Je méně efektivní než vkládání.
6. Zde je prvek předem znám a hledáme správnou pozici pro jeho umístění. Místo, kam prvek umístit, je předem známé, hledáme prvek, který se má vložit na toto místo.
7.

Řazení vložení se používá, když:

  • Pole má malý počet prvků
  • Zbývá seřadit pouze několik prvků

Třídění výběru se používá, když

  • Je třeba seřadit malý seznam
  • Na ceně výměny nezáleží
  • Kontrola všech prvků je povinná
  • Náklady na zápis do paměti jsou důležité jako u flash paměti (počet swapů je O(n) ve srovnání s O(n2) bublinového typu)
8. Řazení vkládání je adaptivní, tj. efektivní pro datové sady, které jsou již v podstatě tříděny: časová složitost je O(kn) když každý prvek na vstupu není větší než k místa mimo svou seřazenou pozici Třídění výběru je místní algoritmus třídění porovnáním