import random
import time
import matplotlib.pyplot as plt
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2] # Corrected pivot selection
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot] # Fixed middle part
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right) # Corrected recursive calls
def measure_sort_time(n):
arr = [random.randint(1, 10000) for _ in range(n)] # Fixed random number generation
start_time = time.time()
quick_sort(arr)
end_time = time.time()
return end_time - start_time # Fixed subtraction syntax
sizes = []
times = []
for n in range(10, 10001, 500): # Fixed range syntax
sizes.append(n)
times.append(measure_sort_time(n))
plt.plot(sizes, times, marker='o') # Fixed syntax errors
plt.title("Quick Sort: Time taken vs Number of Elements")
plt.xlabel("Number of Elements") # Added x-axis label
plt.ylabel("Time (seconds)")
plt.grid(True) # Added y-axis label
plt.show() # Added plt.show() to display the plot
aW1wb3J0IHJhbmRvbQppbXBvcnQgdGltZQppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0CgpkZWYgcXVpY2tfc29ydChhcnIpOgogICAgaWYgbGVuKGFycikgPD0gMToKICAgICAgICByZXR1cm4gYXJyCgogICAgcGl2b3QgPSBhcnJbbGVuKGFycikgLy8gMl0gICMgQ29ycmVjdGVkIHBpdm90IHNlbGVjdGlvbgogICAgbGVmdCA9IFt4IGZvciB4IGluIGFyciBpZiB4IDwgcGl2b3RdCiAgICBtaWRkbGUgPSBbeCBmb3IgeCBpbiBhcnIgaWYgeCA9PSBwaXZvdF0gICMgRml4ZWQgbWlkZGxlIHBhcnQKICAgIHJpZ2h0ID0gW3ggZm9yIHggaW4gYXJyIGlmIHggPiBwaXZvdF0KCiAgICByZXR1cm4gcXVpY2tfc29ydChsZWZ0KSArIG1pZGRsZSArIHF1aWNrX3NvcnQocmlnaHQpICAjIENvcnJlY3RlZCByZWN1cnNpdmUgY2FsbHMKCmRlZiBtZWFzdXJlX3NvcnRfdGltZShuKToKICAgIGFyciA9IFtyYW5kb20ucmFuZGludCgxLCAxMDAwMCkgZm9yIF8gaW4gcmFuZ2UobildICAjIEZpeGVkIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbgogICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCiAgICBxdWlja19zb3J0KGFycikKICAgIGVuZF90aW1lID0gdGltZS50aW1lKCkKICAgIHJldHVybiBlbmRfdGltZSAtIHN0YXJ0X3RpbWUgICMgRml4ZWQgc3VidHJhY3Rpb24gc3ludGF4CgpzaXplcyA9IFtdCnRpbWVzID0gW10KCmZvciBuIGluIHJhbmdlKDEwLCAxMDAwMSwgNTAwKTogICMgRml4ZWQgcmFuZ2Ugc3ludGF4CiAgICBzaXplcy5hcHBlbmQobikKICAgIHRpbWVzLmFwcGVuZChtZWFzdXJlX3NvcnRfdGltZShuKSkKCnBsdC5wbG90KHNpemVzLCB0aW1lcywgbWFya2VyPSdvJykgICMgRml4ZWQgc3ludGF4IGVycm9ycwpwbHQudGl0bGUoIlF1aWNrIFNvcnQ6IFRpbWUgdGFrZW4gdnMgTnVtYmVyIG9mIEVsZW1lbnRzIikKcGx0LnhsYWJlbCgiTnVtYmVyIG9mIEVsZW1lbnRzIikgICMgQWRkZWQgeC1heGlzIGxhYmVsCnBsdC55bGFiZWwoIlRpbWUgKHNlY29uZHMpIikgCnBsdC5ncmlkKFRydWUpICMgQWRkZWQgeS1heGlzIGxhYmVsCnBsdC5zaG93KCkgICMgQWRkZWQgcGx0LnNob3coKSB0byBkaXNwbGF5IHRoZSBwbG90