Quicksort-methode in C en Java: een complete gids

Laatste update: 6 maart 2026
  • Quicksort is een efficiënt sorteeralgoritme gebaseerd op het verdeel-en-heersprincipe, met een gemiddelde prestatie van O(n log n) en in het slechtste geval O(n^2).
  • Kies een spilpunt en verdeel de kleinere en grotere elementen om ze recursief te sorteren; de keuze van het spilpunt beïnvloedt de prestaties.
  • Implementeerbaar in C en Java; er bestaan ​​iteratieve versies, het is niet stabiel en herhaalde elementen kunnen de efficiëntie verminderen.
Quicksort-methode

In de programmeerwereld spelen sorteeralgoritmen een fundamentele rol. Een van de meest efficiënte en veelgebruikte algoritmen is Quicksort. Dit algoritme, bekend om zijn snelheid en efficiëntie bij het sorteren van elementen, kan in verschillende programmeertalen worden geïmplementeerd, waaronder C en Java. In deze uitgebreide handleiding verkennen we Quicksort in C en Java in detail, waarbij we de werking, implementatie en belangrijkste kenmerken analyseren. Ga met ons mee op deze fascinerende reis door het Quicksort- algoritme en ontdek hoe je het kunt toepassen in je eigen programmeerprojecten.

Wat is de Quicksort-methode?

Quicksort, ook wel bekend als quicksort, is een efficiënt sorteeralgoritme dat gebruikmaakt van de verdeel-en-heers-techniek. Het werd in 1959 ontwikkeld door de Britse computerwetenschapper Sir Tony Hoare en is sindsdien uitgegroeid tot een van de meest gebruikte en bestudeerde sorteeralgoritmen in de programmeerwereld.

Het Quicksort -algoritme is gebaseerd op het principe van het selecteren van een spilelement uit de te sorteren lijst en het verdelen van de overige elementen in twee groepen: elementen die kleiner dan of gelijk aan het spilelement zijn, en elementen die groter dan het spilelement zijn. Vervolgens wordt hetzelfde proces recursief toegepast op elk van de twee gegenereerde groepen, totdat alle elementen gesorteerd zijn.

Quicksort-methode in C

De programmeertaal C wordt veel gebruikt voor het implementeren van algoritmen vanwege de efficiëntie en de mogelijkheid om de hardware op laag niveau aan te sturen. Hieronder presenteren we een stapsgewijze implementatie van de Quicksort-methode in C:

Stap 1: Het draaipunt selecteren

Eerst moet er een draaitabelitem uit de lijst worden geselecteerd. Er zijn verschillende manieren om het draaipunt te kiezen, maar de meest gebruikelijke manier is om het eerste item in de lijst te selecteren.

Stap 2: Partitioneren

Zodra het draaipunt is geselecteerd, moet de lijst worden opgedeeld in twee groepen: elementen die kleiner of gelijk zijn aan het draaipunt en elementen die groter zijn dan het draaipunt. Om dit te bereiken, worden een linker- en een rechterwijzer gebruikt om naar het midden van de lijst te bewegen totdat ze elementen vinden die moeten worden verwisseld.

  FIFO-algoritme: een historisch overzicht en de evolutie ervan

Stap 3: Recursie

Nadat de partitionering is uitgevoerd, wordt hetzelfde proces recursief toegepast op elk van de twee gegenereerde groepen. Dat wil zeggen dat er in elke groep een nieuw draaipunt wordt geselecteerd en dat de partitionering opnieuw wordt uitgevoerd totdat alle elementen zijn gesorteerd.

Stap 4: Combinatie

Ten slotte worden de groepen samengevoegd tot één geordende opstelling. Op dit punt staan ​​alle elementen die kleiner of gelijk zijn aan het draaipunt, links ervan, terwijl alle elementen die groter zijn, rechts ervan staan.

Hieronder ziet u een voorbeeld van de implementatie van de Quicksort-methode in C:

#include <stdio.h>

void swap(int* a, int* b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int partition(int arr[], int low, int high) {
    int pivot = arr[low];
    int i = low + 1;
    int j = high;

    while (1) {
        while (arr[i] < pivot && i <= j)
            i++;

        while (arr[j] > pivot)
            j--;

        if (i >= j)
            break;

        swap(&arr[i], &arr[j]);
    }

    swap(&arr[low], &arr[j]);

    return j;
}

void quicksort(int arr[], int low, int high) {
    if (low < high) {
        int pivot = partition(arr, low, high);
        quicksort(arr, low, pivot - 1);
        quicksort(arr, pivot + 1, high);
    }
}

int main() {
    int arr[] = {5, 2, 9, 1, 7, 6, 8, 3, 4};
    int n = sizeof(arr) / sizeof(arr[0]);

    quicksort(arr, 0, n - 1);

    printf("Arreglo ordenado: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }

    return 0;
}

Deze code implementeert de Quicksort-methode in C met behulp van de recursietechniek. Wanneer u het programma uitvoert, wordt de invoermatrix gesorteerd en wordt het resultaat afgedrukt.

Quicksort-methode in Java

Java is een andere veelgebruikte programmeertaal die ook geschikt is voor het efficiënt implementeren van de Quicksort-methode. Hierna laten we een stapsgewijze implementatie van de Quicksort-methode in Java zien:

Stap 1: Het draaipunt selecteren

Net als in de C-implementatie moeten we in Java ook een pivot-element uit de lijst selecteren. We kunnen het eerste element, het laatste element of zelfs een willekeurig element als draaipunt kiezen.

Stap 2: Partitioneren

Zodra de pivot is geselecteerd, moet de lijst worden gepartitioneerd in twee groepen, net als in de C-implementatie. We gebruiken twee indices, één beginnend aan het begin van de lijst en één aan het einde, en verplaatsen ze naar het midden totdat ze elementen vinden die moeten worden verwisseld.

  Het krachtige radix-sorteeralgoritme

Stap 3: Recursie

Nadat de partitionering is uitgevoerd, wordt hetzelfde proces recursief toegepast op elk van de twee gegenereerde groepen. Dit doet u door de Quicksort-methode voor elke groep opnieuw aan te roepen totdat alle elementen zijn gesorteerd.

Stap 4: Combinatie

Ten slotte worden de groepen gecombineerd tot één gesorteerde array, net als in de C-implementatie.

Hieronder ziet u een voorbeeld van de implementatie van de Quicksort-methode in Java:

public class Quicksort {
    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    public static int partition(int[] arr, int low, int high) {
        int pivot = arr[low];
        int i = low + 1;
        int j = high;

        while (true) {
            while (i <= j && arr[i] < pivot)
                i++;

            while (arr[j] > pivot)
                j--;

            if (i >= j)
                break;

            swap(arr, i, j);
        }

        swap(arr, low, j);

        return j;
    }

    public static void quicksort(int[] arr, int low, int high) {
        if (low < high) {
            int pivot = partition(arr, low, high);
            quicksort(arr, low, pivot - 1);
            quicksort(arr, pivot + 1, high);
        }
    }

    public static void main(String[] args) {
        int[] arr = {5, 2, 9, 1, 7, 6, 8, 3, 4};
        int n = arr.length;

        quicksort(arr, 0, n - 1);

        System.out.print("Arreglo ordenado: ");
        for (int i = 0; i < n; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}

Deze code is vergelijkbaar met de C-implementatie en implementeert de Quicksort-methode in Java met behulp van recursie. Wanneer u het programma uitvoert, wordt de invoermatrix gesorteerd en wordt het resultaat afgedrukt.

Veel gestelde vragen

1. Wat is de complexiteit van de Quicksort-methode? De Quicksort-methode heeft een gemiddelde complexiteit van O(n log n) in het gemiddelde geval en O(n^2) in het slechtste geval, waarbij "n" de grootte van de te sorteren array is. Vanwege de efficiëntie en goede prestaties in de meeste gevallen wordt Quicksort echter nog steeds veel gebruikt.

2. Hoe kies ik het beste spil-element (pivot) bij de Quicksort-methode? De keuze van het spil-element kan de prestaties van het algoritme beïnvloeden. Een veelgebruikte strategie is om het middelste element van de matrix als spil-element te kiezen, zodat de elementen gelijkmatiger verdeeld worden. Een andere optie is om drie elementen te kiezen en hun mediaan als spil-element te gebruiken.

3. Wanneer moet ik Quicksort gebruiken in plaats van andere sorteeralgoritmen? Quicksort is een uitstekende keuze als je een efficiënt sorteeralgoritme wilt en voldoende geheugen beschikbaar hebt. Als het geheugen echter beperkt is of als je een stabiel algoritme nodig hebt (een algoritme dat de relatieve volgorde van identieke elementen behoudt), kun je andere algoritmen overwegen, zoals Mergesort.

  De stelling van Mosca en de komst van quantum computing

4. Wat gebeurt er als de te sorteren array herhaalde elementen bevat? De Quicksort-methode kan arrays met herhaalde elementen probleemloos verwerken. In het ergste geval, wanneer alle elementen hetzelfde zijn, kan de verdeling echter oneerlijk zijn en dit kan de prestaties van het algoritme beïnvloeden.

5. Is het mogelijk om de Quicksort-methode iteratief in plaats van recursief te implementeren? Ja, het is mogelijk om de Quicksort-methode iteratief te implementeren met behulp van een datastructuur die een stack wordt genoemd. De recursieve versie wordt vaker gebruikt, maar de iteratieve versie kan in bepaalde gevallen de voorkeur hebben als je de overhead van recursie wilt vermijden.

6. Is de Quicksort-methode stabiel? Nee, de Quicksort-methode is niet stabiel, wat betekent dat de relatieve volgorde van identieke elementen niet per se behouden blijft. Als een stabiel algoritme vereist is, moeten andere opties zoals Mergesort worden overwogen.

Conclusie

Kortom, Quicksort is een efficiënt en veelgebruikt sorteeralgoritme in de programmeerwereld. In deze handleiding hebben we gedetailleerd uitgelegd hoe het werkt en hoe je het kunt implementeren in de programmeertalen C en Java. Quicksort maakt gebruik van de verdeel-en-heers-techniek, waarbij een spil wordt gekozen en de overige elementen in twee groepen worden verdeeld. Door middel van recursie worden de groepen gesorteerd totdat de uiteindelijke gesorteerde array is verkregen.

Het is belangrijk om kennis te nemen van de functies en aandachtspunten van Quicksort, zoals draaipuntselectie en het verwerken van herhaalde elementen. Daarnaast moeten andere sorteeralgoritmeopties worden geëvalueerd op basis van de specifieke behoeften van het project.

Wij hopen dat deze uitgebreide gids over de Quicksort-methode in C en Java u een goed begrip heeft gegeven en u heeft geïnspireerd om dit efficiënte algoritme toe te passen in uw eigen programmeerprojecten!