Skip to content

Commit 54f0bb6

Browse files
committed
logging in sorting
1 parent 699971b commit 54f0bb6

File tree

10 files changed

+175
-108
lines changed

10 files changed

+175
-108
lines changed
Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
1+
import logging
2+
13
def bubble_sort(arr):
2-
length = len(arr)
3-
for i in range(length):
4-
for j in range(0, length-i-1):
5-
if arr[j] > arr[j+1]:
6-
arr[j], arr[j+1] = arr[j+1], arr[j]
7-
return arr
4+
try:
5+
length = len(arr)
6+
for i in range(length):
7+
for j in range(0, length-i-1):
8+
if arr[j] > arr[j+1]:
9+
arr[j], arr[j+1] = arr[j+1], arr[j]
10+
return arr
11+
except Exception as e:
12+
logging.exception("An error occurred during bubble sort: %s", e)
13+
return []
14+
Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,24 @@
1+
import logging
2+
13
def bucket_sort(arr):
2-
n = len(arr)
3-
max_val = max(arr)
4-
bucket = []
5-
for i in range(n):
6-
bucket.append([])
7-
for i in arr:
8-
index_b = int(n * i / max_val)
9-
if index_b != n:
10-
bucket[index_b].append(i)
11-
else:
12-
bucket[n - 1].append(i)
13-
for i in range(n):
14-
bucket[i] = sorted(bucket[i])
15-
result = []
16-
for i in range(n):
17-
result = result + bucket[i]
18-
return result
4+
try:
5+
n = len(arr)
6+
max_val = max(arr)
7+
bucket = []
8+
for i in range(n):
9+
bucket.append([])
10+
for i in arr:
11+
index_b = int(n * i / max_val)
12+
if index_b != n:
13+
bucket[index_b].append(i)
14+
else:
15+
bucket[n - 1].append(i)
16+
for i in range(n):
17+
bucket[i] = sorted(bucket[i])
18+
result = []
19+
for i in range(n):
20+
result = result + bucket[i]
21+
return result
22+
except Exception as e:
23+
logging.exception("An error occurred during bucket sort: %s", e)
24+
return []

competitivepython/sorting/heapsort.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
1+
import logging
2+
13
def heap_sort(arr):
2-
n = len(arr)
3-
for i in range(n//2 - 1, -1, -1):
4-
heapify(arr, n, i)
5-
for i in range(n-1, 0, -1):
6-
arr[i], arr[0] = arr[0], arr[i]
7-
heapify(arr, i, 0)
8-
return arr
4+
try:
5+
n = len(arr)
6+
for i in range(n//2 - 1, -1, -1):
7+
heapify(arr, n, i)
8+
for i in range(n-1, 0, -1):
9+
arr[i], arr[0] = arr[0], arr[i]
10+
heapify(arr, i, 0)
11+
return arr
12+
except Exception as e:
13+
logging.exception("An error occurred during heap sort: %s", e)
14+
return []
15+
916

1017
def heapify(arr, n, i):
1118
largest = i
Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
1+
import logging
2+
13
def insertion_sort(arr):
2-
n = len(arr)
3-
for i in range(1, n):
4-
target = arr[i]
5-
j = i - 1
6-
while j >= 0 and target < arr[j]:
7-
arr[j + 1] = arr[j]
8-
j -= 1
9-
arr[j + 1] = target
10-
return arr
4+
try:
5+
n = len(arr)
6+
for i in range(1, n):
7+
target = arr[i]
8+
j = i - 1
9+
while j >= 0 and target < arr[j]:
10+
arr[j + 1] = arr[j]
11+
j -= 1
12+
arr[j + 1] = target
13+
return arr
14+
except Exception as e:
15+
logging.exception("An error occurred during insertion sort: %s", e)
16+
return []
17+
Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,35 @@
1+
import logging
2+
13
def merge_sort(arr):
2-
if len(arr) > 1:
3-
mid = len(arr) // 2
4-
L = arr[:mid]
5-
R = arr[mid:]
6-
merge_sort(L)
7-
merge_sort(R)
8-
i = j = k = 0
9-
aux = [0] * len(arr)
10-
while i < len(L) and j < len(R):
11-
if L[i] < R[j]:
4+
try:
5+
if len(arr) > 1:
6+
mid = len(arr) // 2
7+
L = arr[:mid]
8+
R = arr[mid:]
9+
merge_sort(L)
10+
merge_sort(R)
11+
i = j = k = 0
12+
aux = [0] * len(arr)
13+
while i < len(L) and j < len(R):
14+
if L[i] < R[j]:
15+
aux[k] = L[i]
16+
i += 1
17+
else:
18+
aux[k] = R[j]
19+
j += 1
20+
k += 1
21+
while i < len(L):
1222
aux[k] = L[i]
1323
i += 1
14-
else:
24+
k += 1
25+
while j < len(R):
1526
aux[k] = R[j]
1627
j += 1
17-
k += 1
18-
while i < len(L):
19-
aux[k] = L[i]
20-
i += 1
21-
k += 1
22-
while j < len(R):
23-
aux[k] = R[j]
24-
j += 1
25-
k += 1
26-
for i in range(len(arr)):
27-
arr[i] = aux[i]
28-
return arr
28+
k += 1
29+
for i in range(len(arr)):
30+
arr[i] = aux[i]
31+
return arr
32+
except Exception as e:
33+
logging.exception("An error occurred during merge sort: %s", e)
34+
return []
35+

competitivepython/sorting/quicksort.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
1+
import logging
2+
13
def quick_sort(arr):
2-
quick_sort_helper(arr, 0, len(arr)-1)
3-
return arr
4+
try:
5+
quick_sort_helper(arr, 0, len(arr)-1)
6+
return arr
7+
except Exception as e:
8+
logging.exception("An error occurred during quick sort: %s", e)
9+
return []
410

511
def quick_sort_helper(arr, low, high):
612
if low < high:
Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
1+
import logging
2+
13
def radix_sort(arr):
2-
max_val = max(arr)
3-
num_digits = len(str(max_val))
4-
for k in range(num_digits):
5-
s = [[] for i in range(10)]
6-
for i in arr:
7-
s[i // (10**k) % 10].append(i)
8-
arr = [j for sub in s for j in sub]
9-
return arr
4+
try:
5+
max_val = max(arr)
6+
num_digits = len(str(max_val))
7+
for k in range(num_digits):
8+
s = [[] for i in range(10)]
9+
for i in arr:
10+
s[i // (10**k) % 10].append(i)
11+
arr = [j for sub in s for j in sub]
12+
return arr
13+
except Exception as e:
14+
logging.exception("An error occurred during radix sort: %s", e)
15+
return []
16+
Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
1+
import logging
2+
13
def selection_sort(arr):
2-
n = len(arr)
3-
for i in range(n):
4-
min_idx = i
5-
for j in range(i+1, n):
6-
if arr[j] < arr[min_idx]:
7-
min_idx = j
8-
arr[i], arr[min_idx] = arr[min_idx], arr[i]
9-
return arr
4+
try:
5+
n = len(arr)
6+
for i in range(n):
7+
min_idx = i
8+
for j in range(i+1, n):
9+
if arr[j] < arr[min_idx]:
10+
min_idx = j
11+
arr[i], arr[min_idx] = arr[min_idx], arr[i]
12+
return arr
13+
except Exception as e:
14+
logging.exception("An error occurred during selection sort: %s", e)
15+
return []
Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
1+
import logging
2+
13
def shell_sort(arr):
2-
n = len(arr)
3-
gap = n // 2
4-
while gap > 0:
5-
for i in range(gap, n):
6-
temp = arr[i]
7-
j = i
8-
while j >= gap and arr[j - gap] > temp:
9-
arr[j] = arr[j - gap]
10-
j -= gap
11-
arr[j] = temp
12-
gap //= 2
13-
return arr
4+
try:
5+
n = len(arr)
6+
gap = n // 2
7+
while gap > 0:
8+
for i in range(gap, n):
9+
temp = arr[i]
10+
j = i
11+
while j >= gap and arr[j - gap] > temp:
12+
arr[j] = arr[j - gap]
13+
j -= gap
14+
arr[j] = temp
15+
gap //= 2
16+
return arr
17+
except Exception as e:
18+
logging.exception("An error occurred during shell sort: %s", e)
19+
return []
20+
Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import logging
2+
13
def insertion_sort(arr, left=0, right=None):
24
if right is None:
35
right = len(arr) - 1
@@ -19,19 +21,24 @@ def merge(left, right):
1921
return [right[0]] + merge(left, right[1:])
2022

2123
def tim_sort(arr):
22-
n = len(arr)
23-
min_run = 32
24-
for i in range(0, n, min_run):
25-
insertion_sort(arr, i, min((i + min_run - 1), n - 1))
26-
size = min_run
27-
while size < n:
28-
for start in range(0, n, size * 2):
29-
midpoint = start + size - 1
30-
end = min((start + size * 2 - 1), (n-1))
31-
merged_array = merge(
32-
left=arr[start:midpoint + 1],
33-
right=arr[midpoint + 1:end + 1]
34-
)
35-
arr[start:start + len(merged_array)] = merged_array
36-
size *= 2
37-
return arr
24+
try:
25+
n = len(arr)
26+
min_run = 32
27+
for i in range(0, n, min_run):
28+
insertion_sort(arr, i, min((i + min_run - 1), n - 1))
29+
size = min_run
30+
while size < n:
31+
for start in range(0, n, size * 2):
32+
midpoint = start + size - 1
33+
end = min((start + size * 2 - 1), (n-1))
34+
merged_array = merge(
35+
left=arr[start:midpoint + 1],
36+
right=arr[midpoint + 1:end + 1]
37+
)
38+
arr[start:start + len(merged_array)] = merged_array
39+
size *= 2
40+
return arr
41+
except Exception as e:
42+
logging.exception("An error occurred during bucket sort: %s", e)
43+
return []
44+

0 commit comments

Comments
 (0)