Team Ai
Apppublic

mehranmamonai/sorting_graph

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
app.py101 linesDownload Raw Back to root
1import streamlit as st2import numpy as np3import pandas as pd4import time5 6st.set_page_config(page_title="Sorting Visualization", page_icon="🫧", layout="wide")7st.title("🫧 Bubble Sort vs Merge Sort (Same Data)")8 9# ---------------- Session State: one fixed dataset ----------------10if "base_numbers" not in st.session_state:11    st.session_state.base_numbers = np.random.randint(1, 100, 10)12 13# ---------------- Controls ----------------14c1, c2 = st.columns(2)15with c1:16    if st.button("🔄 Randomize Numbers"):17        st.session_state.base_numbers = np.random.randint(1, 100, 10)18with c2:19    start_sorting = st.button("▶️ Start Sorting")20 21# ---------------- Layout: two charts side by side ----------------22left, right = st.columns(2)23 24left.subheader("Bubble Sort")25bubble_chart = left.empty()26bubble_timer = left.empty()27 28right.subheader("Merge Sort")29merge_chart = right.empty()30merge_timer = right.empty()31 32# Show the SAME starting data in both charts33base_df = pd.DataFrame({"Index": list(range(1, 11)), "Value": st.session_state.base_numbers})34bubble_chart.bar_chart(base_df.set_index("Index"))35merge_chart.bar_chart(base_df.set_index("Index"))36 37# ---------------- Bubble Sort (animated) ----------------38def bubble_sort_animation(arr):39    n = len(arr)40    for i in range(n):41        for j in range(0, n - i - 1):42            if arr[j] > arr[j + 1]:43                arr[j], arr[j + 1] = arr[j + 1], arr[j]44            # update chart every comparison45            df = pd.DataFrame({"Index": list(range(1, n + 1)), "Value": arr})46            bubble_chart.bar_chart(df.set_index("Index"))47            time.sleep(0.25)48    return arr49 50# ---------------- Merge Sort (animated: updates after each merge) ----------------51def merge_sort_animation(arr):52    def merge(arr, l, m, r):53        L = arr[l:m+1]54        R = arr[m+1:r+1]55        i = j = 056        k = l57        while i < len(L) and j < len(R):58            if L[i] <= R[j]:59                arr[k] = L[i]; i += 160            else:61                arr[k] = R[j]; j += 162            k += 163        while i < len(L):64            arr[k] = L[i]; i += 1; k += 165        while j < len(R):66            arr[k] = R[j]; j += 1; k += 167 68    def mergesort(arr, l, r):69        if l < r:70            m = (l + r) // 271            mergesort(arr, l, m)72            mergesort(arr, m + 1, r)73            merge(arr, l, m, r)74            # update chart after each merge operation75            df = pd.DataFrame({"Index": list(range(1, len(arr) + 1)), "Value": arr})76            merge_chart.bar_chart(df.set_index("Index"))77            time.sleep(0.25)78 79    mergesort(arr, 0, len(arr) - 1)80    return arr81 82# ---------------- Start sorting (each uses a COPY of the same data) ----------------83if start_sorting:84    # Copies so original stays fixed for comparison85    bubble_arr = st.session_state.base_numbers.copy()86    merge_arr = st.session_state.base_numbers.copy()87 88    # Bubble Sort timing89    bubble_timer.info("⏳ Bubble Sort started...")90    t0 = time.time()91    bubble_sort_animation(bubble_arr)92    bubble_elapsed = time.time() - t093    bubble_timer.success(f"✅ Bubble Sort completed in {bubble_elapsed:.2f} seconds!")94 95    # Merge Sort timing96    merge_timer.info("⏳ Merge Sort started...")97    t1 = time.time()98    merge_sort_animation(merge_arr)99    merge_elapsed = time.time() - t1100    merge_timer.success(f"✅ Merge Sort completed in {merge_elapsed:.2f} seconds!")101