Java >> Java tutorial >  >> Java

Arrays.sort() i Java med eksempler

Arrays.sort() i Java med eksempler | I dette indlæg vil vi diskutere, hvordan man sorterer et array ved hjælp af Arrays.sort() i Java? Hvad er den effektive måde at sortere Java-arrays på? Hvordan bruger man Arrays.sort() metoden i Java? Hvordan bruger man Arrays.parallelSort() i Java? Hvad er forskellene mellem Java-metoden Arrays.sort() og Arrays.parallelSort()?

Der er mange sorteringsalgoritmer til rådighed til kun at løse ét problem, dvs. sortere et array. De har forskellig tidskompleksitet og rumkompleksitet. Men blandt alle sorteringsalgoritmer giver Quick Sort den bedste ydeevne.

tidskompleksiteten af ​​Quicksort er O(n log n) i bedste tilfælde O(n log n) i gennemsnitstilfælde og O(n^2) i værste tilfælde. Men fordi det har den bedste ydeevne i gennemsnittet for de fleste input, Quicksort anses generelt for at være den "hurtigste" sorteringsalgoritme.

I klassen java.util.Arrays er der flere sorter() metoder tilgængelige. Alle af dem bruger dual-pivot Quicksort. Dual-Pivot Quicksort er givet af Vladimir Yaroslavskiy, Jon Bentley og Josh Bloch. Denne algoritme tilbyder O(n log(n)) ydeevne på alle datasæt og er typisk hurtigere end traditionelle (én-pivot) Quicksort-implementeringer.

Dual pivot quicksort er en smule hurtigere end den originale single-pivot quicksort. Men stadigvæk vil det værste tilfælde forblive O(n^2), når arrayet allerede er sorteret i stigende eller faldende rækkefølge.

Bemærk:- Mens du arbejder med Java-arrays, behøver du ikke skrive din egen logik for at implementere en sorteringsalgoritme. Bare importer Arrays-klassen og brug Arrays.sort() i Java, som giver den bedste ydeevne i de fleste tilfælde sammenlignet med andre sorteringsalgoritmer.

I Arrays-klassen er der flere overbelastede sorter()-metoder tilgængelige. Disse er,

  1. offentlig statisk void sort(byte[] a)
  2. offentlig statisk void sort(kort[] a)
  3. offentlig statisk void sort(int[] a)
  4. offentlig statisk void sort(long[] a)
  5. offentlig statisk void sort(float[] a)
  6. offentlig statisk void sort(double[] a)
  7. offentlig statisk void sort(char[] a)
  8. offentlig statisk void sort(Object[] a)
  9. offentlig statisk void sort(byte[] a, int fromIndex, int toIndex)
  10. offentlig statisk void sort(short[] a, int fromIndex, int toIndex)
  11. offentlig statisk void sort(int[] a, int fromIndex, int toIndex)
  12. offentlig statisk void sort(long[] a, int fromIndex, int toIndex)
  13. offentlig statisk void sort(float[] a, int fromIndex, int toIndex)
  14. offentlig statisk void sort(double[] a, int fromIndex, int toIndex)
  15. offentlig statisk void sort(char[] a, int fromIndex, int toIndex)
  16. offentlig statisk void sort(Object[] a, int fromIndex, int toIndex)

Arrays.sort(array) :- Det sorterer hele arrayet i stigende rækkefølge.
Arrays.sort(array, fromIndex, toIndex) :- Den sorterer kun elementerne fra fraIndex til toIndex.

Program til at sortere array ved hjælp af Arrays.sort() i Java

Lad os demonstrere et eksempel på sortering af et array ved hjælp af Arrays.sort() i Java.

import java.util.Arrays;

public class SortArray {
  
  // main method
  public static void main(String[] args) {

    // declare and initialize arrays
    int arr[] = {50, 25, 30, 55, 15};
    
    // display array before sorting
    System.out.println("Before Sorting: " + Arrays.toString(arr));
    
    // sort array
    Arrays.sort(arr);
    
    // display array after sorting
    System.out.println("After Sorting: " + Arrays.toString(arr));
  }
}

Output:-

Før sortering:[50, 25, 30, 55, 15]
Efter sortering:[15, 25, 30, 50, 55]

Lad os nu demonstrere byte, short, long, float, double, char, boolean array.

Sortér array af bytes ved hjælp af Arrays.sort() i Java,

// byte array
byte[] byteArr = {15, 12, 11, 14, 13};
Arrays.sort(byteArr);
System.out.println("Byte Array = " + Arrays.toString(byteArr));

Byte Array =[11, 12, 13, 14, 15]

Sortér række af shorts ved hjælp af Arrays.sort() i Java,

// short array
short[] shortArr = {400, 200, 100, 300, 500};
Arrays.sort(shortArr);
System.out.println("Short Array = " + Arrays.toString(shortArr));

Short Array =[100, 200, 300, 400, 500]

Sortér array af longs ved hjælp af Arrays.sort() i Java,

// long array
long[] longArr = {999999999, 10, 500, -888888888, 0};
Arrays.sort(longArr);
System.out.println("Long Array = " + Arrays.toString(longArr));

Long Array =[-888888888, 0, 10, 500, 999999999]

Sortér række af flydere ved hjælp af Arrays.sort() i Java,

// float array
float[] floatArr = {15.9f, 10.5f, 500, -88888, 0.9f};
Arrays.sort(floatArr);
System.out.println("Float Array = " + Arrays.toString(floatArr));

Float Array =[-88888.0, 0.9, 10.5, 15.9, 500.0]

Sortér række af fordobler ved hjælp af Arrays.sort() i Java,

// double array
double[] doubleArr = {10.5, 15.9, 500, -88888, 0.9};
Arrays.sort(doubleArr);
System.out.println("Double Array = " + Arrays.toString(doubleArr));

Double Array =[-88888.0, 0.9, 10.5, 15.9, 500.0]

Sortér række af tegn ved hjælp af Arrays.sort() i Java,

// char array
char[] charArr = {'K','n','o','w','P','r','o','g','r',97,'m'};
Arrays.sort(charArr);
System.out.println("Char Array = " + Arrays.toString(charArr));

Char Array =[K, P, a, g, m, n, o, o, r, r, w]

Sorteringsoperationen er ikke anvendelig for booleske værdier. Den boolske værdi kan indeholde enten sand eller falsk. Derfor indeholder Arrays-klassen ikke nogen metode til at sortere det booleske array. Nedenstående kode giver en fejl.

// boolean array
boolean[] boolArr = {true, false, true, true, false};
Arrays.sort(boolArr); // error

Hvis det angivne array er refereret til null, giver Arrays.sort() i Java heller ikke nogen fejl eller undtagelse.

int arr[] = null;
Arrays.sort(arr); // valid

Sorteringseksempel ved hjælp af Arrays.sort(array, fromIndex, toIndex)

Ved at bruge Arrays.sort(array, fromIndex, toIndex) i Java kan vi kun sortere elementerne mellem et bestemt område. Her fromIndex er indekset for det første element , inklusive , der skal sorteres, og tilIndex er indekset for det sidste element , eksklusiv , der skal sorteres.

  • fra indeks :- indeks for det første element, inklusive.
  • til Indeks :- indeks for det sidste element, eksklusivt.
import java.util.Arrays;

public class SortArray {
  
  // main method
  public static void main(String[] args) {

    // declare and initialize arrays
    int arr[] = {50, 25, 30, 55, 15};
    
    // display array before sorting
    System.out.println("Before Sorting: " + Arrays.toString(arr));
    
    // sort array
    Arrays.sort(arr, 0, 3);
    
    // display array after sorting
    System.out.println("After Sorting: " + Arrays.toString(arr));
  }
}

Output:-

Før sortering:[50, 25, 30, 55, 15]
Efter sortering:[25, 30, 50, 55, 15]

Lad os se nogle flere eksempler med Arrays.sort(array, fromIndex, toIndex)

// char array
char[] charArr1 = {'k','n','o','w','p','r','o','g','r','a','m'};
// sort only {'p','r','o','g','r',97,'m'}
Arrays.sort(charArr1, 4, charArr1.length);
System.out.println("Char Array = " + Arrays.toString(charArr1));

Char Array =[k, n, o, w, a, g, m, o, p, r, r]

// char array
char[] charArr2 = {'k','n','o','w','p','r','o','g','r','a','m'};
// sort only {'n','o','w,,'p','r','o'}
Arrays.sort(charArr2, 1, 7);
System.out.println("Char Array = " + Arrays.toString(charArr2));

Char Array =[k, n, o, o, p, r, w, g, r, a, m]

Undtagelser kastet af Arrays.sort(array, fromIndex, toIndex) i Java

  • UllegalArgumentException :- if fromIndex> toIndex
  • ArrayIndexOutOfBoundsException :- hvis fromIndex <0 eller toIndex> a.length
int arr[] = {50, 25, 30, 55, 15};
Arrays.sort(arr, 5, 0);

Undtagelse i tråden "main" java.lang.IllegalArgumentException:fromIndex(5)> toIndex(0)

int arr[] = {50, 25, 30, 55, 15};
Arrays.sort(arr, -9, 5);

Undtagelse i tråden "main" java.lang.ArrayIndexOutOfBoundsException:Array-indeks uden for intervallet:-9

int arr[] = {50, 25, 30, 55, 15};
Arrays.sort(arr, 0, 7);

Undtagelse i tråden "main" java.lang.ArrayIndexOutOfBoundsException:Array-indeks uden for område:7

Arrays.parallelSort() i Java

Klassen java.util.Arrays indeholder også metoden parallelSort() til at sortere et array. Det sorterer også det angivne array i stigende numerisk rækkefølge. Det er tilføjet i Java8.

Lighed med Arrays.parallelSort() og Arrays.sort() i Java

  • Begge kan bruges til at sortere objekter og primitive arrays.
  • Som standard sorterer begge metoder en matrix i stigende rækkefølge.

I modsætning til Arrays.sort() i Java (som er baseret på en enkelt tråd), bruger den flere tråde. Og til at udføre parallelle opgaver bruger den ForkJoin-puljen. Den bruger en sorteringsfletteknik, der opdeler det angivne array i bidder af en eller anden størrelse og sorterer hver chunk individuelt. Til sidst flettes de sorterede bidder ved hjælp af flettelogikken fra flettesorteringsalgoritmen.

Implementeringen i JDK 8 bruger denne tilgang:-
1) Opdel arrayet i 4 dele.
2) Sorter de to første dele og flet dem derefter.
3) Sorter de næste to dele og flet dem derefter.

Ovenstående trin gentages rekursivt med hver del, indtil størrelsen af ​​den del, der skal sorteres, ikke er mindre end tærskelværdien beregnet ovenfor.

Bemærk :- Arrays.parallelSort() i Java bruger kun parallelisme, når visse betingelser er opfyldt. Hvis matrixstørrelsen er mindre end eller lig med 8192, eller hvis processoren kun har én kerne, bruger den internt Arrays.sort()-metoden.

I lighed med Arrays.sort() i Java, har den også to varianter til at sortere et fuldt array og delvist array,

  • Arrays.parallelSort(array) :- Det sorterer hele arrayet i stigende rækkefølge.
  • Arrays.parallelSort(array, fromIndex, toIndex) :- Den sorterer kun elementerne fra fraIndex til toIndex.
import java.util.Arrays;

public class CompareArray {
  
  // main method
  public static void main(String[] args) {

    // declare and initialize arrays
    int arr[] = {50, 30, 25, 55, 15};
    
    // sort array
    Arrays.parallelSort(arr);
    
    // display array after sorting
    System.out.println(Arrays.toString(arr));
  }
}

Output:-

[15, 25, 30, 50, 55]

Et andet eksempel er at sortere array kun de særlige elementer fra fromIndex til toIndex,

// declare and initialize arrays
int arr[] = {50, 30, 25, 55, 15};
    
// sort array using parallelSort()
Arrays.parallelSort(arr, 1, 3);
    
// display array after sorting
System.out.println(Arrays.toString(arr));

Output:-

[50, 25, 30, 55, 15]

Arrays.sort() i Java vs Arrays.parallelSort() 

Arrays.sort() Arrays.parallelSort()
For at udføre handlingen bruger den en enkelt tråd. Derfor udføres sortering sekventielt, dvs. hele arrayet sorteres ved hjælp af en enkelt tråd. For at udføre operationen bruger den flere tråde. Sorteringen foregår parallelt. dvs. flere tråde udføres parallelt for at sortere stykket af arrayet.
Det er hurtigere for mindre matrixstørrelser, men giver mindre ydeevne for store datasæt og tager lidt længere tid at udføre operationen. Det er langsommere for mindre datasæt, men giver bedre ydeevne for store arrays.
Den bruger ikke systemets flere kerner. Den bruger de mange kerner i systemet.

Java tag