C/C++ Algorithms

Quick Sort

Pivot final position में रखकर दोनों partitions recursively sort होते हैं।

Quick Sort क्या है?

Pivot final position में रखकर दोनों partitions recursively sort होते हैं।

Pivot के आसपास values partition करें।

महत्वपूर्ण बातें

  • Empty, single, duplicate और sorted input test करें।
  • Correctness और optimization अलग रखें।
  • Production में standard library को प्राथमिकता दें।

Quick Sort Visualizer

O(n log n)

हर comparison और data movement देखने के लिए चलाएँ या अगला चरण दबाएँ।

C और C++ code examples

C
कोड चलाएँ →
main.c
#include <stdio.h>

void swap(int *left, int *right) {
    int temporary = *left;
    *left = *right;
    *right = temporary;
}

int partition(int *values, int low, int high) {
    int pivot = values[high];
    int boundary = low;
    for (int scan = low; scan < high; ++scan) {
        if (values[scan] < pivot) {
            swap(&values[boundary++], &values[scan]);
        }
    }
    swap(&values[boundary], &values[high]);
    return boundary;
}

void quick_sort(int *values, int low, int high) {
    if (low >= high) return;
    int pivot = partition(values, low, high);
    quick_sort(values, low, pivot - 1);
    quick_sort(values, pivot + 1, high);
}

int main(void) {
    int values[] = {9, 4, 7, 3, 10, 5};
    quick_sort(values, 0, 5);
    for (int index = 0; index < 6; ++index) {
        printf("%d ", values[index]);
    }
}
अपेक्षित output
3 4 5 7 9 10
C++
कोड चलाएँ →
main.cpp
#include <algorithm>
#include <iostream>
#include <vector>

template<class Iterator>
void quick_sort(Iterator first, Iterator last) {
    if (last - first < 2) return;
    auto pivot = *(last - 1);
    auto middle = std::partition(first, last - 1,
        [pivot](int value) { return value < pivot; });
    std::iter_swap(middle, last - 1);
    quick_sort(first, middle);
    quick_sort(middle + 1, last);
}

int main() {
    std::vector values{9, 4, 7, 3, 10, 5};
    quick_sort(values.begin(), values.end());
    for (int value : values) {
        std::cout << value << ' ';
    }
}
अपेक्षित output
3 4 5 7 9 10

C और C++ की तुलना

Average O(n log n), खराब pivot पर O(n²)। C++ partition step के लिए std::partition उपयोग करता है।

C

Loops, pointers, lengths और buffers स्पष्ट लिखे जाते हैं।

C++

Iterators और algorithms operation को storage से अलग करते हैं।

अभ्यास

दोनों versions चलाकर बदलें और language guarantees की तुलना करें।

  • हर comparison trace करें।
  • Duplicates और extreme values test करें।
  • Standard library के विरुद्ध benchmark करें।