Python - Algoritmaları Sıralama
Sıralama, verileri belirli bir formatta düzenlemeyi ifade eder. Sıralama algoritması, verileri belirli bir sıraya göre düzenleme yolunu belirtir. En yaygın siparişler sayısal veya sözlüksel sıradadır.
Sıralamanın önemi, veriler sıralı bir şekilde saklanırsa, veri aramanın çok yüksek bir seviyeye optimize edilebilmesinde yatmaktadır. Sıralama, verileri daha okunaklı formatlarda temsil etmek için de kullanılır. Aşağıda python'da bu tür beş sıralama uygulaması görüyoruz.
- Kabarcık Sıralama
- Sıralamayı Birleştir
- Ekleme Sıralaması
- Kabuk Sıralaması
- Seçim Sırala
Kabarcık Sıralama
Her bir bitişik eleman çiftinin karşılaştırıldığı ve sıralı değilse elemanların değiştirildiği, karşılaştırmaya dayalı bir algoritmadır.
def bubblesort(list):
# Swap the elements to arrange in order
for iter_num in range(len(list)-1,0,-1):
for idx in range(iter_num):
if list[idx]>list[idx+1]:
temp = list[idx]
list[idx] = list[idx+1]
list[idx+1] = temp
list = [19,2,31,45,6,11,121,27]
bubblesort(list)
print(list)
Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -
[2, 6, 11, 19, 27, 31, 45, 121]
Sıralamayı Birleştir
Birleştirme sıralaması önce diziyi eşit yarıya böler ve ardından bunları sıralı bir şekilde birleştirir.
def merge_sort(unsorted_list):
if len(unsorted_list) <= 1:
return unsorted_list
# Find the middle point and devide it
middle = len(unsorted_list) // 2
left_list = unsorted_list[:middle]
right_list = unsorted_list[middle:]
left_list = merge_sort(left_list)
right_list = merge_sort(right_list)
return list(merge(left_list, right_list))
# Merge the sorted halves
def merge(left_half,right_half):
res = []
while len(left_half) != 0 and len(right_half) != 0:
if left_half[0] < right_half[0]:
res.append(left_half[0])
left_half.remove(left_half[0])
else:
res.append(right_half[0])
right_half.remove(right_half[0])
if len(left_half) == 0:
res = res + right_half
else:
res = res + left_half
return res
unsorted_list = [64, 34, 25, 12, 22, 11, 90]
print(merge_sort(unsorted_list))
Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -
[11, 12, 22, 25, 34, 64, 90]
Ekleme Sıralaması
Ekleme sıralaması, sıralanmış bir listede belirli bir öğe için doğru yeri bulmayı içerir. Yani başlangıçta ilk iki öğeyi karşılaştırıyoruz ve karşılaştırarak sıraladık. Sonra üçüncü öğeyi seçeriz ve önceki iki sıralı öğe arasında uygun konumunu buluruz. Bu şekilde, önceden sıralanmış listeye, onları uygun konumlarına yerleştirerek yavaş yavaş daha fazla öğe eklemeye devam ediyoruz.
def insertion_sort(InputList):
for i in range(1, len(InputList)):
j = i-1
nxt_element = InputList[i]
# Compare the current element with next one
while (InputList[j] > nxt_element) and (j >= 0):
InputList[j+1] = InputList[j]
j=j-1
InputList[j+1] = nxt_element
list = [19,2,31,45,30,11,121,27]
insertion_sort(list)
print(list)
Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -
[2, 11, 19, 27, 30, 31, 45, 121]
Kabuk Sıralaması
Kabuk Sıralama, diğerlerinden uzak olan öğeleri sıralamayı içerir. Verilen bir listenin büyük bir alt listesini sıralar ve tüm öğeler sıralanana kadar listenin boyutunu küçültmeye devam ederiz. Aşağıdaki program, boşluğu liste boyutunun yarısına eşitleyerek bulur ve ardından içindeki tüm öğeleri sıralamaya başlar. Ardından, tüm liste sıralanana kadar boşluğu sıfırlamaya devam ediyoruz.
def shellSort(input_list):
gap = len(input_list) // 2
while gap > 0:
for i in range(gap, len(input_list)):
temp = input_list[i]
j = i
# Sort the sub list for this gap
while j >= gap and input_list[j - gap] > temp:
input_list[j] = input_list[j - gap]
j = j-gap
input_list[j] = temp
# Reduce the gap for the next element
gap = gap//2
list = [19,2,31,45,30,11,121,27]
shellSort(list)
print(list)
Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -
[2, 11, 19, 27, 30, 31, 45, 121]
Seçim Sırala
Seçim sıralamasında, belirli bir listedeki minimum değeri bularak başlar ve onu sıralı bir listeye taşırız. Ardından, sıralanmamış listedeki kalan öğelerin her biri için işlemi tekrar ederiz. Sıralanmış listeye giren bir sonraki eleman, mevcut elemanlarla karşılaştırılır ve doğru konumuna yerleştirilir. Sonuçta, sıralanmamış listedeki tüm öğeler sıralanır.
def selection_sort(input_list):
for idx in range(len(input_list)):
min_idx = idx
for j in range( idx +1, len(input_list)):
if input_list[min_idx] > input_list[j]:
min_idx = j
# Swap the minimum value with the compared value
input_list[idx], input_list[min_idx] = input_list[min_idx], input_list[idx]
l = [19,2,31,45,30,11,121,27]
selection_sort(l)
print(l)
Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -
[2, 11, 19, 27, 30, 31, 45, 121]