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]