Provjera je li niz sortiran u Javi

1. Pregled

U ovom uputstvu vidjet ćemo različite načine kako provjeriti je li niz sortiran.

Prije početka, bilo bi zanimljivo provjeriti kako razvrstati nizove u Javi.

2. Petljom

Jedan od načina provjere je pomoću a za petlja. Možemo ponovite jednu po jednu sve vrijednosti niza.

Pogledajmo kako to učiniti.

2.1. Primitivni niz

Jednostavno rečeno, ponovit ćemo sve položaje osim zadnjeg. To je zato što ćemo usporediti jedan položaj sa sljedećim.

Ako neki od njih nisu sortirani, metoda će se vratiti lažno. Ako se ne vrati nijedna usporedba lažno, to znači da je niz sortiran:

boolean isSorted (int [] array) {for (int i = 0; i array [i + 1]) return false; } return true; }

2.2. Objekti koji se provode Usporedive

Nešto slično možemo učiniti s objektima koji se implementiraju Usporedive. Umjesto da koristite znak veće od koristit ćemo usporediTo:

boolean isSorted (usporediv [] niz) {for (int i = 0; i 0) return false; } return true; }

2.3. Objekti koji se ne provode Usporedive

Ali, što ako se naši objekti ne implementiraju Usporedive? U ovom slučaju možemo umjesto toga stvoriti Usporednik.

U ovom ćemo primjeru koristiti Zaposlenik objekt. To je jednostavan POJO s tri polja:

zaposlenik javne klase implementira Serializable {private int id; privatni naziv niza; privatno int doba; // geteri i postavljači}

Zatim moramo odabrati koje polje želimo naručiti. Evo, naručimo po dob polje:

Comparator byAge = Comparator.comparingInt (Employee :: getAge);

A onda, možemo promijeniti našu metodu i uzeti a Usporednik:

boolean isSorted (polje Objekt [], komparator za usporedbu) {for (int i = 0; i 0) return false; } return true; }

3. Rekurzivno

Umjesto toga, možemo koristiti rekurziju. Ideja je ovdje da ćemo provjeriti dvije pozicije u polju, a zatim se ponavljati dok ne provjerimo svaku poziciju.

3.1. Primitivni niz

U ovoj metodi, provjeravamo posljednje dvije pozicije. Ako su sortirani, pozvat ćemo metodu ponovno, ali s prethodnim položajem. Ako jedan od ovih položaja nije sortiran, metoda će se vratiti lažno:

boolean isSorted (polje int [], int dužina) niz polja [duljina - 1]) return false; return isSorted (niz, duljina - 1); 

3.2. Objekti koji se provode Usporedive

Pogledajmo sada opet objekte koji se provode Usporedive. Vidjet ćemo da je isti pristup s usporediTo će raditi:

boolean isSorted (Usporediv niz [], int dužina) 

3.3. Objekti koji se ne provode Usporedive

U posljednje vrijeme isprobajmo naše Zaposlenik ponovno objekt, dodajući Usporednik parametar:

boolean isSorted (polje Objekt [], komparator usporedbe, dužina int) if (niz == null 

4. Zaključak

U ovom uputstvu vidjeli smo kako provjeriti je li niz sortiran ili nije. Vidjeli smo i iterativna i rekurzivna rješenja.

Naša je preporuka koristiti rješenje petlje. Čistiji je i lakši za čitanje.

Kao i obično, izvorni kod iz ovog vodiča možete pronaći na GitHubu.


$config[zx-auto] not found$config[zx-overlay] not found