Sorting Algorithm Visualizer

I Built This Project in Python and Used Matplotlib Bar Charts to Plot a Random List and Then Animated The Charts to Sort The Bars Using Each Algorithm. It Currently Can Visualize Insertion Sort, Bubble Sort, Selection Sort, and Merge Sort.

from random import random
import matplotlib.pyplot as plt

def insertion_sort(lst):
    n = range(len(lst))
    i = 1
    while i < len(lst):
        j = i-1
        while j >= 0:
            plt.clf()
            plt.title("Insertion Sort")
            plt.bar(n, lst)
            plt.pause(0.001)

            if lst[j+1] < lst[j]:
                lst[j+1], lst[j] = lst[j], lst[j+1]
            else:
                break
            j-=1
        i+=1
    plt.show()

def bubble_sort(lst):
    n = range(len(lst))
    i = 0
    while i < len(lst):
        j = 0
        while j < len(lst)-i-1:
            plt.clf()
            plt.title("Bubble Sort")
            plt.bar(n, lst)
            plt.pause(0.001)

            if lst[j] > lst[j+1]:
                lst[j], lst[j+1] = lst[j+1], lst[j]
            j+=1
        i+=1
    plt.show()

def selection_sort(lst):
    n = range(len(lst))
    
    curr_min = 0
    curr_i = 0
    i = 0
    while i < len(lst):
        plt.clf()
        plt.title("Selection Sort")
        bars = plt.bar(n, lst)
        

        curr_i = i
        curr_min = i
        
        while curr_i < len(lst):
            for bar in bars:
                bar.set_color("#1F77B4")
            bars[curr_min].set_color("red")
            bars[curr_i].set_color("#FAB143")
            plt.pause(0.01)
            if lst[curr_i] < lst[curr_min]:
                curr_min = curr_i
            curr_i+=1

        lst[i], lst[curr_min] = lst[curr_min], lst[i]
        i+=1
    plt.show()

def merge(lst, left_lmt, mid, right_lmt):
    left_counter = left_lmt
    right_counter = mid

    while left_counter < right_counter and right_counter < right_lmt:
        if lst[left_counter] > lst[right_counter]:
            item = lst.pop(right_counter)
            lst.insert(left_counter, item)

            right_counter+=1
            left_counter+=1

            plt.clf()
            plt.title("Merge Sort")
            plt.bar(n, lst)
            plt.pause(0.01)
        else:
            left_counter+=1
            
    while right_counter < right_lmt:
        item = lst.pop(right_counter)
        lst.insert(left_counter, item)

        right_counter+=1
        left_counter+=1
        
        plt.clf()
        plt.title("Merge Sort")
        plt.bar(n, lst)
        plt.pause(0.01)
    return lst
    
def merge_sort(lst, left_lmt, right_lmt):

    if right_lmt - left_lmt > 1:
        
        mid = int((left_lmt + right_lmt) / 2)
        
        lst = merge_sort(lst, left_lmt, mid)
        lst = merge_sort(lst, mid, right_lmt)

        lst = merge(lst, left_lmt, mid, right_lmt)
        
    return lst

print("Welcome to The Sorting Algorithm Visualizer.")
print("Type The Name of The Algorithm You Would Like to Visualize, Or Type Exit to Quit")
print("Options Include: Insertion Sort, Bubble Sort, Selection Sort, Merge Sort")
while True:
    lst = []
    for i in range(45):
        lst.append(random())
    algorithm = input()

    match algorithm:
        case "Insertion Sort":
            insertion_sort(lst)
        case "Bubble Sort":
            bubble_sort(lst)
        case "Selection Sort":
            selection_sort(lst)
        case "Merge Sort":
            n = range(len(lst))
            plt.clf()
            plt.title("Merge Sort")
            plt.bar(n, lst)
            plt.pause(0.1)
            
            sorted_lst = merge_sort(lst, 0, len(lst))
            
            plt.show()
        case "Exit":
            break
        case _:
            print("value not recognized")