Sorting Algorithms

Bubble Sort

def bubble_sort(a):
length = len(a)
for i in range(0, length):
for j in range(0, i):
if a[i] < a[j]:
a[i], a[j] = a[j], a[i]

Selection Sort

def selection_sort(a):
length = len(a)
for i in range(length):
min_idx = i
for j in range(i, length):
if a[j] < a[min_idx]:
min_idx = j
a[min_idx], a[i] = a[i], a[min_idx]

Insertion Sort

def insertion_sort(a):
length = len(a)
for i in range(1, length):
key = a[i]
j = i - 1
while a[j] > key and j >= 0:
a[j + 1] = a[j]
j -= 1
a[j + 1] = key

Merge Sort

Quick Sort

def quick_sort(a, l, r):
if l < r:
pos = partition(a, l, r)
quick_sort(a, l, pos - 1)
quick_sort(a, pos + 1, r)
def partition(a, l, r):
pivot = a[r]
i = l - 1
for j in range(l, r):
if a[j] < pivot:
i += 1
a[j], a[i] = a[i], a[j]
a[i + 1], a[r] = a[r], a[i + 1]
return i + 1

Heap Sort