Kontrol af, om en matrix er sorteret i Java

1. Oversigt

I denne vejledning ser vi forskellige måder at kontrollere, om et array er sorteret.

Før du starter, ville det dog være interessant at kontrollere, hvordan man sorterer arrays i Java.

2. Med en løkke

En måde at kontrollere er med en til løkke. Vi kan gentag alle værdierne i arrayet en efter en.

Lad os se, hvordan man gør det.

2.1. Primitive Array

Kort sagt, vi gentager alle positioner, men den sidste. Dette skyldes, at vi sammenligner en position med den næste.

Hvis nogle af dem ikke er sorteret, vender metoden tilbage falsk. Hvis ingen af ​​sammenligningerne vender tilbage falsk, det betyder, at en matrix er sorteret:

boolsk isSorted (int [] array) {for (int i = 0; i array [i + 1]) returnerer false; } returner sandt }

2.2. Objekter, der implementeres Sammenlignelig

Vi kan gøre noget lignende med objekter, der implementeres Sammenlignelig. I stedet for at bruge et tegn, der er større end vi bruger sammenligne med:

boolean isSorted (Comparable [] array) {for (int i = 0; i 0) returnerer false; } returner sandt }

2.3. Objekter, der ikke implementeres Sammenlignelig

Men hvad hvis vores objekter ikke implementeres Sammenlignelig? I dette tilfælde kan vi i stedet lave en Komparator.

I dette eksempel skal vi bruge Medarbejder objekt. Det er en simpel POJO med tre felter:

offentlig klasse Medarbejderimplementer Serialiserbar {privat int id; privat strengnavn; privat int alder // getters og setters}

Derefter skal vi vælge, hvilket felt vi vil bestille efter. Her, lad os bestille ved alder Mark:

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

Og så kan vi ændre vores metode til også at tage en Komparator:

boolean isSorted (Object [] array, Comparator comparator) {for (int i = 0; i 0) returnerer false; } returner sandt }

3. Rekursivt

Vi kan selvfølgelig bruge rekursion i stedet. Ideen her er, at vi vil kontrollere to positioner i arrayet og derefter genoptage, indtil vi har kontrolleret hver position.

3.1. Primitive Array

I denne metode vi tjekker de sidste to positioner. Hvis de er sorteret, kalder vi metoden igen, men med en tidligere position. Hvis en af ​​disse positioner ikke er sorteret, vender metoden tilbage falsk:

boolsk isSorted (int [] array, int længde) længde array [længde - 1]) returnere false; return isSorted (array, længde - 1); 

3.2. Objekter, der implementeres Sammenlignelig

Lad os nu se igen som objekter, der implementeres Sammenlignelig. Vi får se den samme tilgang med sammenligne med vil arbejde:

boolean isSorted (Sammenlignelig [] array, int længde) 

3.3. Objekter, der ikke implementeres Sammenlignelig

Senest, lad os prøve vores Medarbejder objekt igen og tilføje Komparator parameter:

boolean isSorted (Object [] array, Comparator comparator, int længde) if (array == null 

4. Konklusion

I denne vejledning har vi set, hvordan man kontrollerer, om et array er sorteret eller ej. Vi så både iterative og rekursive løsninger.

Vores anbefaling er at bruge loop-løsningen. Det er renere og lettere at læse.

Som normalt kan kildekoden fra denne vejledning findes på GitHub.