-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathquickSort.py
76 lines (59 loc) · 1.96 KB
/
quickSort.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
""" Quicksort
Implementazione degli algoritmi di quicksort e random_quicksort, delle corrispettive procedure
quicksort
complessità temporale: caso peggiore O(n^2)
caso medio Θ(n ln(n))
random_quicksort: tempo di esecuzione atteso O(n ln(n))
"""
from random import randint
def quicksort(A, p, r):
"""implementazione ricorsiva di quicksort
Parametri:
A (list): lista di numeri interi
p (int): indice di inzio dell'array(o sottoarray)
r(int): indice di fine dell'array(o sottoarray)
"""
if p < r:
q = partition(A, p, r)
quicksort(A, p, q - 1)
quicksort(A, q + 1, r)
def partition(A, p, r):
"""procedura partition
Parametri:
A (int): lista di numeri interi
p (int): indice di inzio dell'array(o sottoarray)
r(int): indice di fine dell'array(o sottoarray)
Valore di Ritorno:
int: indice del pivot
"""
x = A[r]
i = p - 1
for j in range(p, r):
if A[j] <= x:
i = i + 1
A[i], A[j] = A[j], A[i]
A[i + 1], A[r] = A[r], A[i + 1]
return i + 1
def randomize_quicksort(A, p, r):
"""implementazione della versione randomizzata di quicksort
Parametri:
A (list): lista di numeri interi
p (int): indice di inzio dell'array(o sottoarray)
r(int): indice di fine dell'array(o sottoarray)
"""
if p < r:
q = randomize_partition(A, p, r)
randomize_quicksort(A, p, q - 1)
randomize_quicksort(A, q + 1, r)
def randomize_partition(A, p, r):
"""procedura partition
Parametri:
A (int): lista di numeri interi
p (int): indice di inzio dell'array(o sottoarray)
r(int): indice di fine dell'array(o sottoarray)
Valore di Ritorno:
int: indice del pivot
"""
pivot = randint(p, r)
A[r], A[pivot] = A[pivot], A[r]
return partition(A, p, r)