Notes-TheAlgorithmDesignManual/GrokkingAlgorithms.org

1.2 KiB

Notes & Exercises: Grokking Algorithms

Random

Recursive sum

OCaml

let rec sum_rec = function
  | [] -> 0
  | n::ns -> n + sum_rec ns;;

sum_rec [2;3;4;2;1];;
12
let sum_rec_tail list =
  let rec f acc = function
  | [] -> 0
  | n::ns -> sum_rec (acc + n) ns
  in f 0 list;;

sum_rec [2;3;4;2;1];;
12

Python

def sum_rec(arr):
    if not arr:
        return 0
    else:
        return arr[0] + sum_rec(arr[1:])

print(sum_rec([1,2,3]))
6

Quicksort

Python

import random

def quicksort(arr):
    if len(arr) < 2:
        return arr
    elif len(arr) == 2:
        if arr[0] > arr[1]:
            temp = arr[1]
            arr[1] = arr[0]
            arr[0] = temp
        return arr
    else:
        # Pick a random pivot
        index = random.randrange(0, len(arr))
        pivot = arr.pop(index)
        left = [x for x in arr if x <= pivot]
        right = [x for x in arr if x > pivot]
        return quicksort(left) + [pivot] + quicksort(right)