File size: 1,241 Bytes
5c8f53e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# insertion sort

def insertion_sort(arr):
    steps = []  # keep all steps here

    for j in range(1, len(arr)):
        key = arr[j]
        i = j - 1

        while i >= 0 and arr[i] > key:
            arr[i + 1] = arr[i]
            i -= 1
            steps.append(arr.copy())  # her kaydırma adımını kaydet
        arr[i + 1] = key
        steps.append(arr.copy())  # save every moment
        # arr listesini sıralıyor
        # Ama her küçük değişiklikten sonra o anki halini steps listesine ekliyor

    return steps

# nested listeler için deepcopy()
# Liste içinde başka listeler varsa, onları da ayrı ayrı kopyalar

from algorithms import insertion_sort

my_list=[5,2,4,6,1,3]

steps = insertion_sort(my_list)

for i, step in enumerate(steps):
    print(f"Step {i + 1}: {step}")

# 	enumerate(steps) → Hem adımı (i) hem listeyi (step) aynı anda alır
# 	Her sıralama adımı steps içinde kayıtlı olduğu için tüm sıralama sürecini gözlemleyebiliriz
# 	Bu yapı daha sonra Streamlit arayüzüne kolayca taşınabilir

def print_step(step):
    for num in step:
        bar = '█' * num  # Sayıya göre bar uzunluğu
        print(f"{num:>2} {bar}")
    print("-" * 20)  # Adımlar arasında ayraç