TASK: Research the Quicksort algorithm and write a robust Python implementation to 'sorting_algo.py'.
|
||
----------------------------------------
|
||
Loading...
|
||
|
||
[Agent] Iteration 1/300
|
||
[Agent] has_tool_calls=true
|
||
[Agent] Executing 1 tool(s)
|
||
[1;34m[Agent] Spawning researcher agent for: Research the Quicksort algorithm in detail, including its implementation, variations, and best practices.[0m
|
||
[2m[parallel] launching spawn_agent[0m
|
||
-> Searching web: Quicksort algorithm detailed explanation, implementation, variations, and best practices
|
||
[2m[parallel] launching web_search[0m
|
||
-> Searching web: Quicksort algorithm detailed explanation, implementation, variations, and best practices
|
||
[2m[parallel] launching web_search[0m
|
||
[Agent] Iteration 2/300
|
||
[Agent] has_tool_calls=true
|
||
[Agent] Executing 1 tool(s)
|
||
-> Writing file: sorting_algo.py
|
||
[2m[parallel] launching write_file[0m
|
||
|
||
[36m [2m CHANGES: sorting_algo.py [0m
|
||
LINE OLD | LINE NEW
|
||
--------------------------------------------------------------------------------------------------------------------------------------------
|
||
1 [31m-[0m [31m"""Robust Quicksort implementation with variations""" [0m |
|
||
2 [31m-[0m [31mimport random [0m |
|
||
3 [31m-[0m [31m [0m |
|
||
4 [31m-[0m [31mdef quicksort(arr, low=0, high=None, pivot_strategy='last'): [0m |
|
||
5 [31m-[0m [31m if high is None: [0m |
|
||
6 [31m-[0m [31m high = len(arr) - 1 [0m |
|
||
7 [31m-[0m [31m if low < high: [0m |
|
||
8 [31m-[0m [31m # Choose pivot based on strategy [0m |
|
||
9 [31m-[0m [31m if pivot_strategy == 'random': [0m |
|
||
10 [31m-[0m [31m pivot_index = random.randint(low, high) [0m |
|
||
11 [31m-[0m [31m arr[pivot_index], arr[high] = arr[high], arr[pivot_index] [0m |
|
||
12 [31m-[0m [31m elif pivot_strategy == 'median-of-three': [0m |
|
||
13 [31m-[0m [31m mid = (low + high) // 2 [0m |
|
||
14 [31m-[0m [31m # Find median of arr[low], arr[mid], arr[high] [0m |
|
||
15 [31m-[0m [31m s = sorted([(arr[low], low), (arr[mid], mid), (arr[high], high)], key=lambda x: x[0]) [0m |
|
||
16 [31m-[0m [31m median_index = s[1][1] [0m |
|
||
17 [31m-[0m [31m arr[median_index], arr[high] = arr[high], arr[median_index] [0m |
|
||
18 [31m-[0m [31m # Partition [0m |
|
||
19 [31m-[0m [31m p = partition(arr, low, high) [0m |
|
||
20 [31m-[0m [31m # Recursively sort partitions [0m |
|
||
21 [31m-[0m [31m quicksort(arr, low, p - 1, pivot_strategy) [0m |
|
||
22 [31m-[0m [31m quicksort(arr, p + 1, high, pivot_strategy) [0m |
|
||
23 [31m-[0m [31m [0m |
|
||
24 [31m-[0m [31m [0m |
|
||
25 [31m-[0m [31mdef partition(arr, low, high): [0m |
|
||
26 [31m-[0m [31m pivot = arr[high] [0m |
|
||
27 [31m-[0m [31m i = low - 1 [0m |
|
||
28 [31m-[0m [31m for j in range(low, high): [0m |
|
||
29 [31m-[0m [31m if arr[j] <= pivot: [0m |
|
||
30 [31m-[0m [31m i += 1 [0m |
|
||
31 [31m-[0m [31m arr[i], arr[j] = arr[j], arr[i] [0m |
|
||
32 [31m-[0m [31m arr[i + 1], arr[high] = arr[high], arr[i + 1] [0m |
|
||
33 [31m-[0m [31m return i + 1 [0m |
|
||
34 [31m-[0m [31m [0m |
|
||
35 [31m-[0m [31m# Example usage [0m |
|
||
36 [31m-[0m [31mif __name__ == "__main__": [0m |
|
||
37 [31m-[0m [31m data = [3, 6, 8, 10, 1, 2, 1, 5, 9, 4] [0m |
|
||
38 [31m-[0m [31m print("Original data:", data) [0m |
|
||
39 [31m-[0m [31m quicksort(data, pivot_strategy='median-of-three') [0m |
|
||
40 [31m-[0m [31m print("Sorted data:", data) [0m |
|
||
| 1 [32m+[0m [32mdef quicksort(arr): [0m
|
||
| 2 [32m+[0m [32m """Recursively sorts an array using the Quicksort algorithm.""" [0m
|
||
| 3 [32m+[0m [32m if len(arr) <= 1: [0m
|
||
| 4 [32m+[0m [32m return arr [0m
|
||
| 5 [32m+[0m [32m pivot = arr[len(arr) // 2] [0m
|
||
| 6 [32m+[0m [32m left = [x for x in arr if x < pivot] [0m
|
||
| 7 [32m+[0m [32m middle = [x for x in arr if x == pivot] [0m
|
||
| 8 [32m+[0m [32m right = [x for x in arr if x > pivot] [0m
|
||
| 9 [32m+[0m [32m return quicksort(left) + middle + quicksort(right) [0m
|
||
| 10 [32m+[0m [32m [0m
|
||
| 11 [32m+[0m [32m [0m
|
||
| 12 [32m+[0m [32mdef quicksort_inplace(arr, low=0, high=None): [0m
|
||
| 13 [32m+[0m [32m """In-place Quicksort implementation for efficiency.""" [0m
|
||
| 14 [32m+[0m [32m if high is None: [0m
|
||
| 15 [32m+[0m [32m high = len(arr) - 1 [0m
|
||
| 16 [32m+[0m [32m if low < high: [0m
|
||
| 17 [32m+[0m [32m pivot_index = partition(arr, low, high) [0m
|
||
| 18 [32m+[0m [32m quicksort_inplace(arr, low, pivot_index - 1) [0m
|
||
| 19 [32m+[0m [32m quicksort_inplace(arr, pivot_index + 1, high) [0m
|
||
| 20 [32m+[0m [32m [0m
|
||
| 21 [32m+[0m [32m [0m
|
||
| 22 [32m+[0m [32mdef partition(arr, low, high): [0m
|
||
| 23 [32m+[0m [32m pivot = arr[high] [0m
|
||
| 24 [32m+[0m [32m i = low [0m
|
||
| 25 [32m+[0m [32m for j in range(low, high): [0m
|
||
| 26 [32m+[0m [32m if arr[j] <= pivot: [0m
|
||
| 27 [32m+[0m [32m arr[i], arr[j] = arr[j], arr[i] [0m
|
||
| 28 [32m+[0m [32m i += 1 [0m
|
||
| 29 [32m+[0m [32m arr[i], arr[high] = arr[high], arr[i] [0m
|
||
| 30 [32m+[0m [32m return i [0m
|
||
|
||
[Agent] Iteration 3/300
|
||
The Python implementation of the Quicksort algorithm has been written to the file 'sorting_algo.py'. It includes both a recursive version and an in-place version for efficiency, along with the partition helper function. If you need further modifications or explanations, please let me know!
|
||
[Agent] has_tool_calls=false
|
||
[Agent] Completed in 3 iteration(s)
|