-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsiralamalar.py
164 lines (134 loc) · 6.62 KB
/
siralamalar.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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
import time
import winsound
class Sortings:
def __init__(self):
self.comparison_count = 0 # Karşılaştırma sayısını takip etmek için değişken
def insertion_sort(self, data, drawData, timeTick):
self.comparison_count = 0 # Karşılaştırma sayısını sıfırla
for i in range(1, len(data)):
key = data[i]
j = i - 1
while j >= 0 and data[j] > key:
self.comparison_count += 1 # Karşılaştırma sayısını artır
data[j + 1] = data[j]
j -= 1
drawData(data, ['green' if x == j + 1 else 'white' for x in range(len(data))])
time.sleep(timeTick)
data[j + 1] = key
drawData(data, ['green' if x == j + 1 else 'white' for x in range(len(data))])
time.sleep(timeTick)
self.complete_sorting() # Sıralama tamamlandığında sonuçları göster
def bubble_sort(self, data, drawData, timeTick):
self.comparison_count = 0 # Karşılaştırma sayısını sıfırla
for _ in range(len(data) - 1):
for j in range(len(data) - 1):
self.comparison_count += 1 # Karşılaştırma sayısını artır
if data[j] > data[j + 1]:
data[j], data[j + 1] = data[j + 1], data[j]
drawData(data, ['green' if x == j or x == j + 1 else 'white' for x in range(len(data))])
time.sleep(timeTick)
self.complete_sorting() # Sıralama tamamlandığında sonuçları göster
def selection_sort(self, data, drawData, timeTick):
self.comparison_count = 0 # Karşılaştırma sayısını sıfırla
for i in range(len(data) - 1):
min_idx = i
for j in range(i + 1, len(data)):
self.comparison_count += 1 # Karşılaştırma sayısını artır
if data[min_idx] > data[j]:
min_idx = j
data[i], data[min_idx] = data[min_idx], data[i]
drawData(data, ['green' if x == min_idx or x == i else 'red' for x in range(len(data))])
time.sleep(timeTick)
self.complete_sorting() # Sıralama tamamlandığında sonuçları göster
def partition(self, data, left, right, drawData, timeTick):
border = left
pivot = data[right]
drawData(data, self.get_color_array(len(data), left, right, border, border))
time.sleep(timeTick)
for j in range(left, right):
if data[j] < pivot:
self.comparison_count += 1 # Karşılaştırma sayısını artır
drawData(data, self.get_color_array(
len(data), left, right, border, j, True))
time.sleep(timeTick)
data[border], data[j] = data[j], data[border]
border += 1
drawData(data, self.get_color_array(len(data), left, right, border, j))
time.sleep(timeTick)
# pivot ile border değerini takas et
drawData(data, self.get_color_array(len(data), left, right, border, right, True))
time.sleep(timeTick)
data[border], data[right] = data[right], data[border]
return border
def quick_sort(self, data, left, right, drawData, timeTick):
if left < right:
partitionIdx = self.partition(data, left, right, drawData, timeTick)
self.quick_sort(data, left, partitionIdx - 1, drawData, timeTick)
self.quick_sort(data, partitionIdx + 1, right, drawData, timeTick)
def merge_sort(self, data, drawData, timeTick):
self.comparison_count = 0 # Karşılaştırma sayısını sıfırla
self.merge_sort_alg(data, 0, len(data) - 1, drawData, timeTick)
self.complete_sorting() # Sıralama tamamlandığında sonuçları göster
def merge_sort_alg(self, data, left, right, drawData, timeTick):
if left < right:
middle = (left + right) // 2
self.merge_sort_alg(data, left, middle, drawData, timeTick)
self.merge_sort_alg(data, middle + 1, right, drawData, timeTick)
self.merge(data, left, middle, right, drawData, timeTick)
def merge(self, data, left, middle, right, drawData, timeTick):
drawData(data, self.get_color_array_merge(len(data), left, middle, right))
time.sleep(timeTick)
leftPart = data[left:middle + 1]
rightPart = data[middle + 1:right + 1]
leftIdx = rightIdx = 0
for dataIdx in range(left, right + 1):
if leftIdx < len(leftPart) and rightIdx < len(rightPart):
self.comparison_count += 1 # Karşılaştırma sayısını artır
if leftPart[leftIdx] <= rightPart[rightIdx]:
data[dataIdx] = leftPart[leftIdx]
leftIdx += 1
else:
data[dataIdx] = rightPart[rightIdx]
rightIdx += 1
elif leftIdx < len(leftPart):
data[dataIdx] = leftPart[leftIdx]
leftIdx += 1
else:
data[dataIdx] = rightPart[rightIdx]
rightIdx += 1
drawData(data, ["green" if x >= left and x <=
right else "white" for x in range(len(data))])
time.sleep(timeTick)
def get_color_array(self, data_len, left, right, border, currIdx, isSwapping=False):
colorArray = []
for i in range(data_len):
if i >= left and i <= right:
colorArray.append('gray')
else:
colorArray.append('white')
if i == right:
colorArray[i] = 'blue'
elif i == border:
colorArray[i] = 'red'
elif i == currIdx:
colorArray[i] = 'yellow'
if isSwapping:
if i == border or i == currIdx:
colorArray[i] = 'green'
return colorArray
def get_color_array_merge(self, length, left, middle, right):
colorArray = []
for i in range(length):
if i >= left and i <= right:
if i >= left and i <= middle:
colorArray.append("yellow")
else:
colorArray.append("pink")
else:
colorArray.append("white")
return colorArray
def complete_sorting(self):
for i in range(2):
winsound.Beep(2500, 300)
time.sleep(0.05)
print("Karşılaştırma Sayısı:", self.comparison_count)