Sortarea și amestecarea java, blogul numai despre java

S-ar putea să fiți interesat de modul în care metoda sort () sortează lista. De obicei, dacă te uiți la algoritmul de sortare în cartea despre algoritmi, este reprezentat pentru rețele folosind accesul aleatoriu la elemente. Cu toate acestea, accesul aleator la elementele listei este ineficient.







Puteți sorta eficient listele utilizând formularul de sortare a îmbinării. Cu toate acestea, implementarea în limba Java nu face acest lucru. Se resetează pur și simplu toate elementele într-o matrice, sortează matrice, utilizând o versiune diferită de tipul de îmbinare și copiază apoi secvența sortate înapoi la lista.

îmbinare algoritm de sortare utilizate în colecția bibliotecii, sortarerapidă ușor mai lent (sortare rapidă) - alegerea tradițională pentru uz general algoritmul de sortare. Cu toate acestea, ea are un avantaj important: este stabil, adică, nu swap elemente echivalente.

De ce să vă deranjez cu ordinea elementelor echivalente? Luați în considerare un scenariu comun. Să presupunem că aveți o listă de angajați pe care i-ați sortat deja după nume. Acum sortați după salariu. Ce se va întâmpla cu angajații cu același salariu? Cu sortare stabilă, ordinea după nume este păstrată. Cu alte cuvinte, rezultatul este o listă ordonată mai întâi după salariu, apoi după nume.







Deoarece colecții nu trebuie să pună în aplicare toate metodele de „opționale“, toate metodele care au parametrii de colectare ar trebui să indice în cazul în care transferul de colectare algoritm în condiții de siguranță. De exemplu, este evident că nu va dori să treacă o listă de unmodifiableList algoritm de sortare. Ce tipuri de liste puteți transfera? Conform documentației, lista ar trebui să fie modificabilă, dar nu ar trebui să aibă o dimensiune variabilă.

Termenii sunt definiți după cum urmează:

  • Lista poate fi modificată dacă acceptă metoda set ().
  • Lista este variabilă în mărime dacă acceptă metodele add () și remove ().

Clasa Colecții are un algoritm de amestecare. care efectuează opusul sarcinii de sortare: modifică aleatoriu ordinea articolelor din listă.

Colecții. shuffle (cărți);

Dacă aplicați o listă care nu implementează interfața RandomAccess. shuffle metoda copii toate elementele din matrice, shuffle matrice, și copiază apoi elementele amestecate înapoi în listă.

Programul prezentat mai jos umple matricea listă cu 49 de obiecte întregi. conținând numere de la 1 la 49. Apoi le amestecă accidental în listă și selectează primele 6 valori din lista amestecată. Și, în final, sortează valorile selectate și le imprimă.

Aici este programul real care demonstrează algoritmii de amestecare și sortare aleatorii:







Trimiteți-le prietenilor: