Sorting
Timsort
Just use [8,2,4,10].sort()
Mergesort
def merge_sort(unsorted_list):
if len(unsorted_list) <= 1:
return unsorted_list
middle = len(unsorted_list) // 2
left_list = unsorted_list[:middle]
right_list = unsorted_list[middle:]
left_list = merge_sort(left_list)
right_list = merge_sort(right_list)
return list(_merge_sort_merge(left_list, right_list))
def _merge_sort_merge(left_half, right_half):
result = []
while len(left_half) != 0 and len(right_half) != 0:
if left_half[0] < right_half[0]:
result.append(left_half[0])
left_half.remove(left_half[0])
else:
result.append(right_half[0])
right_half.remove(right_half[0])
if len(left_half) == 0:
result = result + right_half
else:
result = result + left_half
return result
Quicksort
def _quick_sort_partition(arr, low, high):
i = (low-1)
pivot = arr[high]
for j in range(low, high):
if arr[j] <= pivot:
i = i+1
arr[i], arr[j] = arr[j], arr[i]
arr[i+1], arr[high] = arr[high], arr[i+1]
return (i+1)
def quick_sort(arr, low, high):
if len(arr) == 1:
return arr
if low < high:
pi = _quick_sort_partition(arr, low, high)
quick_sort(arr, low, pi-1)
quick_sort(arr, pi+1, high)
Bubblesort
def bubble_sort(unsorted_list):
for iter_num in range(len(unsorted_list)-1, 0, -1):
for index in range(iter_num):
if unsorted_list[index] > unsorted_list[index + 1]:
tmp = unsorted_list[index]
unsorted_list[index] = unsorted_list[index + 1]
unsorted_list[index + 1] = tmp