Válogatás Rendezés Java-ban
1. Bemutatkozás
Ebben az oktatóanyagban megtesszük megtanulja a Kiválasztás rendezése, nézze meg a Java-ban való megvalósítását és elemezze a teljesítményét.
2. Algoritmus áttekintése
Válogatás rendezése -val kezdődik az elem az 1. pozícióban egy nem rendezett tömböt, és a következő elemeken keresztül átkutat keresse meg a legkisebb elemet. Miután megtalálta, a legkisebb elemet kicserélik az 1. pozícióban lévő elemre.
Ezután az algoritmus továbbhalad a 2. pozícióban lévő elemre, és a következő elemeken átkutatva megtalálja a 2. legkisebb elem indexét. Miután megtalálta, a második legkisebb elemet felcseréljük a 2. pozícióban lévő elemmel.
Ez a folyamat addig tart, amíg el nem érjük a tömb n-1. Elemét, amely az n-1. Legkisebb elemet az n-1. Pozícióba helyezi. Az utolsó elem automatikusan a helyére esik, az n-1. Iterációban, ezáltal rendezi a tömböt.
Találunk a legnagyobb elem a legkisebb elem helyett a tömb csökkenő sorrendbe rendezéséhez.
Lássunk egy példát egy nem rendezett tömbre, és rendezzük növekvő sorrendbe, hogy vizuálisan megértsük az algoritmust.
2.1. Egy példa
Vegye figyelembe a következő rendezetlen tömböt:
int [] arr = {5, 4, 1, 6, 2}
1. iteráció
Figyelembe véve az algoritmus fenti működését, az elemet az 1. pozícióban kezdjük - 5 -, és az összes következő elemet átvizsgáljuk, hogy megtaláljuk a legkisebb elemet - 1. Ezután kicseréljük a legkisebb elemet az 1. pozícióban lévő elemgel.
A módosított tömb nows a következőképpen néz ki:
{ 1 , 4 , 5 , 6 , 2 }
Összehasonlítás: 4
2. iteráció
A második iterációban továbblépünk a 2. elemre - 4 -, és átvizsgáljuk a következő elemeket, hogy megtaláljuk a második legkisebb elemet - 2. Ezután kicseréljük a második legkisebb elemet úgy, hogy az elem a 2. helyzetben van.
A módosított tömb most így néz ki:
{ 1 , 2 , 5 , 6 , 4 }
Összehasonlítás: 3
Hasonlóan folytatva a következő iterációkat hajtjuk végre:
3. iteráció
{ 1 , 2 , 4 , 6 , 5 }
Összes összehasonlítás: 2
4. iteráció
{ 1 , 2 , 4 , 5 , 6 }
Összes összehasonlítás: 1
3.Végrehajtás
Vezessük be a Selection Sort-ot pár használatával mert hurkok:
public static void sortAscending (final int [] arr) {for (int i = 0; i <arr.length - 1; i ++) {int minElementIndex = i; mert (int j = i + 1; j arr [j]) {minElementIndex = j; }} if (minElementIndex! = i) {int temp = arr [i]; arr [i] = arr [minElementIndex]; arr [minElementIndex] = hőmérséklet; }}}
Természetesen ennek megfordításához valami hasonlót tehetnénk:
public static void sortDescending (final int [] arr) {for (int i = 0; i <arr.length - 1; i ++) {int maxElementIndex = i; for (int j = i + 1; j <arr.length; j ++) {if (arr [maxElementIndex] <arr [j]) {maxElementIndex = j; }} if (maxElementIndex! = i) {int temp = arr [i]; arr [i] = arr [maxElementIndex]; arr [maxElementIndex] = hőmérséklet; }}}
És egy kicsit több könyökzsírral ezeket kombinálhatnánk Összehasonlítós.
4. Teljesítmény áttekintés
4.1. Idő
A korábban látott példában a legkisebb elem kiválasztásához összesen: (n-1) összehasonlítások majd kicserélte az 1. pozícióba. Hasonlóképpen, a következő legkisebb elem kiválasztása szükséges összes (n-2) összehasonlítások, majd csere a 2. pozícióban stb.
Így a 0 indexből kiindulva teljesítünk n-1, n-2, n-3, n-4…. 1 összehasonlítások. Az utolsó elem a korábbi iterációk és cserék miatt automatikusan a helyére kerül.
Matematikailag a az első összege n-1 természetes számok megmondja, hány összehasonlításra van szükségünk egy tömb méretének rendezéséhez n a Selection Sort használatával.
Az összeg összegének képlete n természetes számok az n (n + 1) / 2.
Esetünkben az első összegére van szükség n-1 természetes számok. Ezért kicseréljük n val vel n-1 a fenti képletben:
(n-1) (n-1 + 1) / 2 = (n-1) n / 2 = (n ^ 2-n) / 2
Mint n ^ 2 jól láthatóan növekszik n növekszik, figyelembe vesszük a n mint teljesítmény benchmark, így ennek az algoritmusnak van egy időbeli összetettsége O (n ^ 2).
4.2. Tér
A kiegészítő tér bonyolultsága szempontjából a Selection Sort egy további változót igényel, hogy ideiglenesen megtartsa az értéket a cseréhez. Ezért a Selection Sort's a tér bonyolultsága az O (1).
5. Következtetés
A Selection Sort egy nagyon egyszerű rendezési algoritmus a megértéshez és megvalósításhoz. Sajnálatos módon, másodfokú időbeli összetettsége drága válogatási technikává teszi. Továbbá, mivel az algoritmusnak át kell olvasnia az egyes elemeket, a legjobb, átlagos és a legrosszabb idő összetettsége megegyezik.
Más rendezési technikák, például az Insertion Sort és a Shell Sort szintén másodfokú legrosszabb időbeli összetettséggel bírnak, de jobb és átlagos esetben jobban teljesítenek.
Nézze meg a GitHubon a Selection Sort over teljes kódját.