about summary refs log tree commit diff
path: root/scratch/data_structures_and_algorithms/merge-sort.py
blob: 6dbe0fa0f3c352bb004e7d3f8981c14986e1c767 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28



# merge :: [a] -> [a] -> [a]
# merge([], []): []
# merge(xs, []): xs
# merge([], ys): ys
# merge(xs@[x|xs'], ys@[y|ys'])
#   when y =< x: cons(y, merge(xs, ys'))
#   when x < y:  cons(x, merge(xs', ys))
def merge(xs, ys):
    if xs == [] and ys == []:
        return []
    elif ys == []:
        return xs
    elif xs == []:
        return ys
    else:
        x = xs[0]
        y = ys[0]

        if y <= x:
            return [y] + merge(xs, ys[1:])
        else:
            return [x] + merge(xs[1:], ys)
        
print(merge([3, 4, 6, 10, 11, 15],
            [1, 5, 8, 12, 14, 19]))