# 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ç