Inversiunea, sortarea și amestecarea matricelor

Inversiunea unui matrice

Pentru a inversa ordinea elementelor din matrice, utilizați metoda inversă. Această metodă modifică ordinea elementelor din matricea sursă și returnează o referință la ea însăși.







În acest caz, omisiunile din matrice sunt păstrate.

Sortarea elementelor

Metoda de sortare sortează elementele matricei, schimbând ordinea elementelor din matricea sursă. sortarea are un singur argument pentru o funcție care compară elementele matricei. Dacă funcția de comparație nu este specificată, elementele sunt sortate în ordine lexicografică.

Chiar dacă sortați o matrice constând numai din numere, ele vor fi încă sortate ca șiruri de caractere, nu ca numere.

Pentru a sorta o serie de numere, trebuie să treci funcția de comparare la două metode. Funcția a trecut la metoda de sortare. alternativ invocate pentru diferite perechi de elemente de matrice și trebuie să returneze un număr negativ dacă primul argument este mai mic decât cel de-al doilea, un număr pozitiv dacă primul argument este mai mare decât cel de-al doilea și 0. dacă sunt egale. Astfel, codul care sortează matricea de numere va arăta astfel.

Utilizând funcția de apel invers, reelele pot fi sortate după orice criteriu. De exemplu, sortați o serie de obiecte cu valoarea unei proprietăți sau chiar cu mai multe proprietăți.







Funcția de apel invers trebuie să returneze un număr, în caz contrar Internet Explorer va arunca o eroare, iar restul browserelor pur și simplu nu vor sorta matricea.

Omisiunile din matrice, precum și elementele matricei, egale cu nedefinirea la sortare, nu sunt luate în considerare deloc. Aceste elemente se termină pur și simplu la sfârșitul matricei.

Pentru a sorta un tablou în ordinea lexicografică inversă, imediat după apelarea sortare fără argumente, apelați metoda inversă. Pentru alte tipuri de sortare, va trebui să modificați funcția de apel invers.

Amestecarea elementelor

Cu toate acestea, această metodă nu poate fi numită eficientă, variază în mod diferit în diferite browsere, dar este întotdeauna foarte neuniformă. Creați un test: vom amesteca în mod repetat matricea a zece numere consecutive de la 0 la 9. și vom calcula de câte ori fiecare dintre numere va fi în primul rând.

În Firefox, rezultatul testului va fi la fel de mult ca 1860,1841,1223,704,633,613,409,255,1226,1236. și anume cel mai adesea, sub indicele zero al matricei mixte, va exista un indice zero al matricei originale, și cel mai puțin - al șaptelea.

În IE și Safari rezultatele sunt complet diferite, dar nu mai bune: 471,890,855,1362,1090,1088,844,1252,1084,1064. atunci indicele zero al matricei sursă va fi cu mult mai puțin probabil să fie la indicele zero din matricea sortată.

În Opera, răspândirea este mult mai mare, dar mai ordonată: 2810,2861,1391,233,206,914,946,459,86,94. În Chrome, o situație similară, dar și mai rea: 2868,2930,1962,1076,574,291,164,82,33,20.

Concluzie - utilizarea unei astfel de amestecări este foarte ineficientă. Este mult mai bine să treceți prin toate elementele și să le schimbați la una arbitrară cu un indice mai mare sau egal. Numai pentru a sorta elementele de la sfârșitul matricei, astfel încât luarea unui număr aleatoriu ar fi mai ușoară.

Testul anterior pentru această metodă va da 1000 plus-minus 40 de repetări pentru fiecare index, care este, fără îndoială, un rezultat mai bun. În plus, această metodă este mai rapidă decât cea precedentă în diferite browsere cu 40-70%.







Articole similare

Trimiteți-le prietenilor: