├── algorithms ├── __init__.py ├── insertionSort.py ├── bubbleSort.py ├── selectionSort.py ├── countingSort.py ├── heapSort.py ├── quickSort.py └── mergeSort.py ├── img ├── ss1.png ├── ss2.png └── ss3.png ├── .gitignore ├── colors.py ├── README.md └── main.py /algorithms/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/ss1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FahadulShadhin/sorting-algorithms-visualizer/HEAD/img/ss1.png -------------------------------------------------------------------------------- /img/ss2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FahadulShadhin/sorting-algorithms-visualizer/HEAD/img/ss2.png -------------------------------------------------------------------------------- /img/ss3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FahadulShadhin/sorting-algorithms-visualizer/HEAD/img/ss3.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__/ 2 | 3 | # Environments 4 | .env 5 | .venv 6 | env/ 7 | venv/ 8 | ENV/ 9 | env.bak/ 10 | venv.bak/ -------------------------------------------------------------------------------- /colors.py: -------------------------------------------------------------------------------- 1 | DARK_GRAY = '#65696B' 2 | LIGHT_GRAY = '#C4C5BF' 3 | BLUE = '#0CA8F6' 4 | DARK_BLUE = '#4204CC' 5 | WHITE = '#FFFFFF' 6 | BLACK = '#000000' 7 | RED = '#F22810' 8 | YELLOW = '#F7E806' 9 | PINK = '#F50BED' 10 | LIGHT_GREEN = '#05F50E' 11 | PURPLE = '#BF01FB' 12 | -------------------------------------------------------------------------------- /algorithms/insertionSort.py: -------------------------------------------------------------------------------- 1 | import time 2 | from colors import * 3 | 4 | def insertion_sort(data, drawData, timeTick): 5 | for i in range(len(data)): 6 | temp = data[i] 7 | k = i 8 | while k > 0 and temp < data[k-1]: 9 | data[k] = data[k-1] 10 | k -= 1 11 | data[k] = temp 12 | drawData(data, [YELLOW if x == k or x == i else BLUE for x in range(len(data))]) 13 | time.sleep(timeTick) 14 | 15 | drawData(data, [BLUE for x in range(len(data))]) 16 | -------------------------------------------------------------------------------- /algorithms/bubbleSort.py: -------------------------------------------------------------------------------- 1 | import time 2 | from colors import * 3 | 4 | def bubble_sort(data, drawData, timeTick): 5 | size = len(data) 6 | for i in range(size-1): 7 | for j in range(size-i-1): 8 | if data[j] > data[j+1]: 9 | data[j], data[j+1] = data[j+1], data[j] 10 | drawData(data, [YELLOW if x == j or x == j+1 else BLUE for x in range(len(data))] ) 11 | time.sleep(timeTick) 12 | 13 | drawData(data, [BLUE for x in range(len(data))]) 14 | -------------------------------------------------------------------------------- /algorithms/selectionSort.py: -------------------------------------------------------------------------------- 1 | import time 2 | from colors import * 3 | 4 | def selection_sort(data, drawData, timeTick): 5 | for i in range(len(data)-1): 6 | minimum = i 7 | for k in range(i+1, len(data)): 8 | if data[k] < data[minimum]: 9 | minimum = k 10 | 11 | data[minimum], data[i] = data[i], data[minimum] 12 | drawData(data, [YELLOW if x == minimum or x == i else BLUE for x in range(len(data))] ) 13 | time.sleep(timeTick) 14 | 15 | drawData(data, [BLUE for x in range(len(data))]) 16 | -------------------------------------------------------------------------------- /algorithms/countingSort.py: -------------------------------------------------------------------------------- 1 | # Counting sort is not a comperison-based algorithm like the others. 2 | # This algorithm counts the frequency of every unique element in a range. 3 | # If the maximum value of the array is large it is not a good idea to use counting sort. 4 | # But as in this case data[] is generating values between 1 to 150, counting sort works just fine :) 5 | 6 | import time 7 | from colors import * 8 | 9 | def counting_sort(data, drawData, timeTick): 10 | n = max(data) + 1 11 | count = [0] * n 12 | for item in data: 13 | count[item] += 1 14 | 15 | k = 0 16 | for i in range(n): 17 | for j in range(count[i]): 18 | data[k] = i 19 | drawData(data, [BLUE for x in range(len(data))] ) 20 | time.sleep(timeTick) 21 | k += 1 22 | 23 | drawData(data, [BLUE for x in range(len(data))]) 24 | 25 | -------------------------------------------------------------------------------- /algorithms/heapSort.py: -------------------------------------------------------------------------------- 1 | import time 2 | from colors import * 3 | 4 | def heapify(data, n, i, drawData, timeTick): 5 | largest = i 6 | left = 2*i+1 7 | right = 2*i+2 8 | 9 | if left < n and data[i] < data[left]: 10 | largest = left 11 | 12 | if right < n and data[largest] < data[right]: 13 | largest = right 14 | 15 | if largest != i: 16 | data[i], data[largest] = data[largest], data[i] 17 | heapify(data, n, largest, drawData, timeTick) 18 | 19 | 20 | def heap_sort(data, drawData, timeTick): 21 | n = len(data) 22 | 23 | for i in range(n-1, -1, -1): 24 | heapify(data, n, i, drawData, timeTick) 25 | 26 | for i in range(n-1, 0, -1): 27 | data[i], data[0] = data[0], data[i] 28 | heapify(data, i, 0, drawData, timeTick) 29 | drawData(data, [YELLOW if x == i else BLUE for x in range(n)]) 30 | time.sleep(timeTick) 31 | 32 | drawData(data, [BLUE for x in range(len(data))]) 33 | -------------------------------------------------------------------------------- /algorithms/quickSort.py: -------------------------------------------------------------------------------- 1 | import time 2 | from colors import * 3 | 4 | def partition(data, start, end, drawData, timeTick): 5 | i = start + 1 6 | pivot = data[start] 7 | 8 | for j in range(start+1, end+1): 9 | if data[j] < pivot: 10 | data[i], data[j] = data[j], data[i] 11 | i+=1 12 | data[start], data[i-1] = data[i-1], data[start] 13 | return i-1 14 | 15 | def quick_sort(data, start, end, drawData, timeTick): 16 | if start < end: 17 | pivot_position = partition(data, start, end, drawData, timeTick) 18 | quick_sort(data, start, pivot_position-1, drawData, timeTick) 19 | quick_sort(data, pivot_position+1, end, drawData, timeTick) 20 | 21 | drawData(data, [PURPLE if x >= start and x < pivot_position else YELLOW if x == pivot_position 22 | else DARK_BLUE if x > pivot_position and x <=end else BLUE for x in range(len(data))]) 23 | time.sleep(timeTick) 24 | 25 | drawData(data, [BLUE for x in range(len(data))]) 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Sorting Algorithms Visualizer 2 |
A python application to visualize various sorting algorithms.
3 | 10 |