From 006f86fdcfd9454e896fb35ad928ad274d74b734 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johan=20Wahr=C3=A9us?= Date: Fri, 15 May 2026 18:13:55 +0200 Subject: [PATCH] Added quicksort --- README.md | 9 +++++---- algorithms/quicksort.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 algorithms/quicksort.py diff --git a/README.md b/README.md index 3235e13..d5d0be9 100644 --- a/README.md +++ b/README.md @@ -9,11 +9,12 @@ A repo for storing Python code and tracking learning progress. All programs are ├── README.md ├── algorithms │ ├── binary_search.py # interactive -│ └── bubble_sort.py # animated demo +| ├── bubble_sort.py # visual demo +│ └── quicksort.py ├── asynchronous_programming -│ ├── dependency_scheduler.py # input-driven -│ ├── taskgroup_error_handling.py # input-driven -│ └── worker_pipeline.py # input-driven +│ ├── dependency_scheduler.py +│ ├── taskgroup_error_handling.py +│ └── worker_pipeline.py └── data_structures ├── doubly_linked_list.py # interactive └── singly_linked_list.py # interactive diff --git a/algorithms/quicksort.py b/algorithms/quicksort.py new file mode 100644 index 0000000..055d02e --- /dev/null +++ b/algorithms/quicksort.py @@ -0,0 +1,30 @@ +def quicksort(numbers: list[int], low: int = 0, high: int | None = None) -> list[int]: + if high is None: + high = len(numbers) - 1 + if low >= high: + return numbers + pivot_index = _partition(numbers, low, high) + quicksort(numbers, low, pivot_index - 1) + quicksort(numbers, pivot_index + 1, high) + return numbers + + +def _partition(numbers: list[int], low: int, high: int) -> int: + pivot = numbers[high] + i = low + for j in range(low, high): + if numbers[j] <= pivot: + numbers[i], numbers[j] = numbers[j], numbers[i] + i += 1 + numbers[i], numbers[high] = numbers[high], numbers[i] + return i + + +def main() -> None: + numbers = [4, 2, 7, 1, 9, 6, 5, 8, 3] + print("Unsorted:", numbers) + print("Sorted: ", quicksort(numbers)) + + +if __name__ == "__main__": + main() \ No newline at end of file