Skip to content

Commit a3c3da5

Browse files
authored
Merge pull request #1 from gaeng02/Sort_Sort.py
#1 Develop Sort_Sort.py
2 parents 3e2af1f + 8f9504b commit a3c3da5

File tree

1 file changed

+73
-10
lines changed

1 file changed

+73
-10
lines changed

Python/Sort/Sort.py

Lines changed: 73 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ def bubble_sort (array: list) -> list :
1212
swap += 1
1313
array[j], array[j+1] = array[j+1], array[j]
1414

15+
return comparison, swap
1516

1617
def exchange_sort (array: list) -> list :
1718

@@ -25,25 +26,46 @@ def exchange_sort (array: list) -> list :
2526
swap += 1
2627
array[i], array[j] = array[j], array[i]
2728

29+
return comparison, swap
2830

29-
def heapify (array: list, index: int, size: int) -> list :
31+
32+
def heapify (array: list, index: int, size: int, comparison: int, swap: int) -> list :
3033
largest = index
3134
left = 2 * index + 1
3235
right = 2 * index + 2
3336

34-
if ((size > left) and (array[left] > array[largest])) : largest = left
35-
if ((size > right) and (array[right] > array[largest])) : largest = right
37+
if ((size > left) and (array[left] > array[largest])) :
38+
comparison += 1
39+
largest = left
40+
41+
if ((size > right) and (array[right] > array[largest])) :
42+
comparison += 2
43+
largest = right
44+
45+
3646
if (largest != index) :
47+
swap += 1
3748
array[index], array[largest] = array[largest], array[index]
38-
heapify(array, largest, size)
49+
comparison, swap = heapify(array, largest, size, comparison, swap)
50+
51+
return comparison, swap
3952

4053
def heap_sort (array: list) -> list :
4154

4255
n = len(array)
43-
for index in range (n//2 -1, -1, -1) : heapify(array, index, n)
56+
comparison, swap = 0, 0
57+
58+
for index in range (n//2 -1, -1, -1) :
59+
a, b = heapify(array, index, n, comparison, swap)
60+
comparison, swap = comparison + a, swap + b
61+
4462
for index in range (n-1, 0, -1) :
63+
swap += 1
4564
array[0], array[index] = array[index], array[0]
46-
heapify(array, 0, index)
65+
a, b = heapify(array, 0, index, comparison, swap)
66+
comparison, swap = comparison + a, swap + b
67+
68+
return comparison, swap
4769

4870

4971
def insertion_sort (array: list) -> list :
@@ -60,6 +82,7 @@ def insertion_sort (array: list) -> list :
6082

6183
else : break
6284

85+
return comparison, swap
6386

6487
def merge_sort (array: list) -> list :
6588

@@ -72,9 +95,13 @@ def merge_sort (array: list) -> list :
7295
left = array[ : m]
7396
right = array[m : ]
7497

75-
comparison, swap = merge_sort(left)
76-
comparison, swap = merge_sort(right)
77-
merge(m, n-m, left, right, array, comparison, swap)
98+
a, b = merge_sort(left)
99+
comparison, swap = comparison + a, swap + b
100+
a, b = merge_sort(right)
101+
comparison, swap = comparison + a, swap + b
102+
comparison, swap = merge(m, n-m, left, right, array, comparison, swap)
103+
104+
return comparison, swap
78105

79106
def merge (l, r, left, right, array,comparison: int, swap: int) :
80107

@@ -99,7 +126,7 @@ def merge (l, r, left, right, array,comparison: int, swap: int) :
99126
array[k] = right[j]
100127
j += 1
101128
k += 1
102-
129+
return
103130

104131
def quick_sort (array: list) -> list :
105132

@@ -123,3 +150,39 @@ def partition (array: list, low: int, high: int) -> int :
123150
array[i], array[j] = array[j], array[i]
124151
array[j], array[low] = array[low], array[j]
125152
return j
153+
154+
155+
def selection_sort (array: list) -> list :
156+
157+
n = len(array)
158+
comparison, swap = 0, 0
159+
160+
for i in range (n) :
161+
min_index = i
162+
163+
for j in range (i+1, n) :
164+
comparison += 1
165+
if (array[min_index] > array[j]) :
166+
min_index = j
167+
168+
swap += 1
169+
array[i], array[min_index] = array[min_index], array[i]
170+
171+
return comparison, swap
172+
173+
if (__name__ == "__main__") :
174+
175+
'''
176+
bubble_sort
177+
exchange_sort
178+
heap_sort
179+
insertion_sort
180+
merge_sort
181+
quick_sort
182+
selection_sort
183+
'''
184+
array = [5, 4, 3, 2, 1]
185+
a, b = heap_sort(array)
186+
187+
print(array)
188+
print(a, b)

0 commit comments

Comments
 (0)