def bubble_sort(a): # swaps each time l = len(a) for i in range(l): for j in range(i+1, l): if a[i] > a[j]: swap(a, i, j)
def insertion_sort(a): # insert j'th element to right spot on its left l = len(a) for i in range(1, l): j = i while j > 0 and a[j] < a[j-1]: swap(a, j, j-1) j -= 1
def insertion_sort(a): # insert j'th element to right spot on its left l = len(a) for i in range(1, l): j = i while j > 0 and a[j] < a[j - 1]: swap(a, j, j - 1) j -= 1
def selection_sort(a): # swaps once with min_index l = len(a) for i in range(l): min_index = i for j in range(i + 1, l): if a[min_index] > a[j]: min_index = j swap(a, i, min_index)
def selection_sort(a): # swaps once with min_index l = len(a) for i in range(l): min_index = i for j in range(i+1, l): if a[min_index] > a[j]: min_index = j swap(a, i, min_index)
def heap_sort(a): l = len(a) - 1 mid = l // 2 for i in list(range(mid, 0, -1)): # O(nlogn) heapify(a, i, l) # log n print(a) for i in list(range(l, 0, -1)): swap(a, 1, i) heapify(a, 1, i) print(a)
def heap_sort(a): l = len(a)-1 mid = l//2 for i in list(range(mid, 0, -1)): # O(nlogn) heapify(a, i, l) # log n print(a) for i in list(range(l, 0, -1)): swap(a, 1, i) heapify(a, 1, i) print(a)
def heapify(a, root, l): left = 2 * root right = (2 * root) + 1 max_index = root # make root's value max(root, left, right) if left < l and a[root] < a[left]: max_index = left if right < l and a[max_index] < a[right]: max_index = right if max_index != root: swap(a, root, max_index) heapify(a, max_index, l)
def heapify(a, root, l): left = 2*root right = (2*root)+1 max_index = root # make root's value max(root, left, right) if left < l and a[root] < a[left]: max_index = left if right < l and a[max_index] < a[right]: max_index = right if max_index != root: swap(a, root, max_index) heapify(a, max_index, l)
def _qsort(a, left, right): if left >= right: return mid = (left + right)//2 swap(a, left, mid) # Partition last = left i = left + 1 while i <= right: if a[i] < a[left]: last += 1 swap(a, i, last) i += 1 swap(a, left, last) # recurse _qsort(a, left, last-1) _qsort(a, last+1, right)
def _qsort(a, left, right): if left >= right: return mid = (left + right) // 2 swap(a, left, mid) # Partition last = left i = left + 1 while i <= right: if a[i] < a[left]: last += 1 swap(a, i, last) i += 1 swap(a, left, last) # recurse _qsort(a, left, last - 1) _qsort(a, last + 1, right)