quicksort java algorithm
Denne vejledning forklarer Quicksort-algoritmen i Java, dens illustrationer, QuickSort-implementering i Java ved hjælp af kodeeksempler:
Quicksort-sorteringsteknik bruges i vid udstrækning i softwareapplikationer. Quicksort bruger en divide-and-conquer-strategi som fusionssortering.
I quicksort-algoritmen vælges først et specielt element kaldet 'pivot', og den pågældende matrix eller liste er opdelt i to undergrupper. De partitionerede delmængder er måske ikke lige store.
=> Læs gennem Easy Java Training Series.
Skillevægge er således, at alle elementerne mindre end drejelementet er mod venstre for drejetappen, og elementerne større end drejetappen er til højre for drejetappen. Quicksort-rutinen sorterer rekursivt de to underlister. Quicksort fungerer effektivt og også hurtigere, selv for større arrays eller lister.
Hvad du vil lære:
- Quicksort Partition Java
- Quicksort-algoritme Java
- Pseudokode til hurtig sortering
- Illustration
- Quicksort-implementering i Java
- Ofte stillede spørgsmål
- Konklusion
- Anbefalet læsning
Quicksort Partition Java
Partitionering er nøgleprocessen i Quicksort-teknikken. Så hvad er partitionering?
Givet en matrix A, vælger vi en værdi x kaldet pivot, således at alle elementerne mindre end x er før x, og alle elementerne større end x er efter x.
En pivotværdi kan være en af følgende:
- Det første element i arrayet
- Det sidste element i arrayet
- Det midterste element i arrayet
- Ethvert tilfældigt element i arrayet
Denne pivotværdi placeres derefter på sin rette position i arrayet ved at opdele arrayet. Således er output fra 'partitioneringsprocessen' drejningsværdien i sin rette position, og elementerne er mindre end drejning til venstre og elementer større end en drejning til højre.
Overvej følgende diagram, der forklarer partitioneringsprocessen.
gratis mp3 downloader app til Android-telefon
Ovenstående diagram viser processen med partitionering af array ved gentagne gange at vælge det sidste element i arrayet som en pivot. På hvert niveau skal du bemærke, at vi opdeler arrayet i to underarrays ved at placere drejning i den korrekte position.
Dernæst viser vi algoritmen og pseudokoden til quicksort-teknik, der også inkluderer partitionsrutine.
Quicksort-algoritme Java
Den generelle algoritme for quicksort er angivet nedenfor.
quicksort(Arr, low, high) begin Declare array Arr[N] to be sorted low = 1st element; high = last element; pivot if(low Nedenfor er pseudokoden til quicksort-teknikken.
Pseudokode til hurtig sortering
Følgende er pseudokoden til en hurtig sorteringsteknik. Bemærk, at vi har leveret pseudokoden til quicksort og partitioneringsrutine.
//pseudocode for quick sort main algorithm procedure quickSort(arr[], low, high) arr = list to be sorted low – first element of the array high – last element of array begin if (low Illustration
Lad os se illustrationen af quicksort-algoritmen. Tag følgende array som et eksempel. Her har vi valgt det sidste element som pivot.
Som vist er det første element mærket lavt og det sidste element er højt.
Som det fremgår af ovenstående illustration, er der to markører, høje og lave, der henholdsvis peger på det sidste og første element i arrayet. Begge disse markører flyttes, efterhånden som kviksortet skrider frem.
Når elementet, der peges af den lave pointer, bliver større end pivotelementet, og elementet, der peges af den høje pointer, er mindre end pivotelementet, udveksler vi de elementer, der peges af den lave og høje pointer, og hver markør bevæger sig fremad med 1 position.
Ovenstående trin udføres, indtil begge markører krydser hinanden i arrayet. Når de krydser, får drejelementet sin rette position i arrayet. På dette tidspunkt er arrayet opdelt, og nu kan vi sortere hvert underarray uafhængigt ved rekursivt at anvende en hurtig sorteringsalgoritme til hver af underarrayet.
bedste måde at downloade youtube-lyd på
Quicksort-implementering i Java
QuickSort-teknikken kan implementeres i Java ved hjælp af enten rekursion eller iteration. I dette afsnit vil vi se begge disse teknikker.
Rekursivt Quicksort
Vi ved, at den grundlæggende teknik til quicksort illustreret ovenfor bruger rekursion til at sortere arrayet. I det rekursive quicksort efter partitionering af arrayet kaldes quicksort-rutinen rekursivt for at sortere underarrayerne.
Nedenstående implementering viser quicksort-teknikken ved hjælp af rekursion.
import java.util.*; class QuickSort { //selects last element as pivot, pi using which array is partitioned. int partition(int intArray[], int low, int high) { int pi = intArray[high]; int i = (low-1); // smaller element index for (int j=low; j Produktion:
Oprindelig matrix: [4, -1, 6, 8, 0, 5, -3]
Sorteret matrix: [-3, -1, 0, 4, 5, 6, 8]
Iterativ Quicksort
I iterativ quicksort bruger vi hjælpestakken til at placere mellemliggende parametre i stedet for at bruge rekursion og sortere partitioner.
Følgende Java-program implementerer iterativ quicksort.
bedste virtuelle maskinsoftware til Windows 10
import java.util.*; class Main { //partitions the array around pivot=> last element static int partition(int numArray[], int low, int high) { int pivot = numArray[high]; // smaller element index int i = (low - 1); for (int j = low; j <= high - 1; j++) { // check if current element is less than or equal to pivot if (numArray[j] <= pivot) { i++; // swap the elements int temp = numArray[i]; numArray[i] = numArray[j]; numArray[j] = temp; } } // swap numArray[i+1] and numArray[high] (or pivot) int temp = numArray[i + 1]; numArray[i + 1] = numArray[high]; numArray[high] = temp; return i + 1; } //sort the array using quickSort static void quickSort(int numArray[], int low, int high) { //auxillary stack int[] intStack = new int[high - low + 1]; // top of stack initialized to -1 int top = -1; // push initial values of low and high to stack intStack[++top] = low; intStack[++top] = high; // Keep popping from stack while is not empty while (top>= 0) { // Pop h and l high = intStack[top--]; low = intStack[top--]; // Set pivot element at its correct position // in sorted array int pivot = partition(numArray, low, high); // If there are elements on left side of pivot, // then push left side to stack if (pivot - 1 > low) { intStack[++top] = low; intStack[++top] = pivot - 1; } // If there are elements on right side of pivot, // then push right side to stack if (pivot + 1 Produktion:
Original Array: [3, 2, 6, -1, 9, 1, -6, 10, 5]
Sorteret matrix: [- 6, -1, 1, 2, 3, 6, 9, 10, 5]
Ofte stillede spørgsmål
Spørgsmål nr. 1) Hvordan fungerer et Quicksort?
Svar: Quicksort bruger en kløft og erobrer strategi. Quicksort partitionerer først en matrix omkring et valgt pivotelement og genererer underarrays, der er sorteret rekursivt.
Spørgsmål nr. 2) Hvad er tidskompleksiteten af Quicksort?
Svar: Tidskompleksiteten af quicksort i gennemsnit er O (nlogn). I værste fald er det O (n ^ 2) det samme som valgsorteringen.
Spørgsmål nr. 3) Hvor bruges Quicksort?
Svar: Quicksort bruges mest i rekursive applikationer. Quicksort er den del af C-biblioteket. Også næsten programmeringssprogene, der bruger indbygget sortering, implementerer quicksort.
Spørgsmål nr. 4) Hvad er fordelen ved Quicksort?
Svar:
- Quicksort er en effektiv algoritme og kan nemt sortere endda en enorm liste over elementer.
- Det er på stedet sortering og har derfor ikke brug for ekstra plads eller hukommelse.
- Det er meget udbredt og giver en effektiv måde at sortere datasæt af enhver længde.
Spørgsmål nr. 5) Hvorfor er Quicksort bedre end flettsorteringen?
Svar: Hovedårsagen til, at quicksort er bedre end flettsorteringen, er, at quicksort er en sorteringsmetode på stedet og ikke kræver ekstra hukommelsesplads. Flet sortering kræver yderligere hukommelse til mellemlig sortering.
Konklusion
Quicksort betragtes som den bedste sorteringsalgoritme primært på grund af dets effektivitet til at sortere selv et stort datasæt på O (nlogn) -tid.
Quicksort er også en stedssortering og kræver ikke ekstra hukommelsesplads. I denne vejledning har vi set den rekursive og iterative implementering af quicksort.
I vores kommende vejledning fortsætter vi med sorteringsmetoder i Java.
=> Se på Java Beginners Guide her.
Anbefalet læsning
- Binær søgealgoritme i Java - implementering og eksempler
- Java Array - Hvordan udskrives elementer af en matrix i Java?
- Selektionssortering i Java - Valgsorteringsalgoritme og eksempler
- Array-datatyper - int Array, Double array, Array of Strings Etc.
- Java Array - Erklære, oprette og initialisere en matrix i Java
- JAVA-vejledning til begyndere: 100+ praktiske Java-videovejledninger
- Java Copy Array: Sådan kopieres / klones en array i Java
- Java Array Length Tutorial med kodeeksempler