From 79a7a05b2172fe602d8fc6ca7b6b0606df8bb14a Mon Sep 17 00:00:00 2001 From: Felix Martin Date: Fri, 13 Nov 2020 14:48:47 -0500 Subject: [PATCH] Implement merge sort in Python I know, I want to do this in Rust, but prototyping in Python comes much more natural to me. I have to work on my Rust skills! --- .gitignore | 3 +++ Cargo.toml | 9 +++++++++ src/main.py | 37 +++++++++++++++++++++++++++++++++++++ src/main.rs | 19 +++++++++++++++++++ 4 files changed, 68 insertions(+) create mode 100644 Cargo.toml create mode 100644 src/main.py create mode 100644 src/main.rs diff --git a/.gitignore b/.gitignore index 62bd1a4..5da92f7 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,6 @@ Cargo.lock # These are backup files generated by rustfmt **/*.rs.bk +# Sublime +algos.sublime-project +algos.sublime-workspace diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..6839c06 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "algos" +version = "0.1.0" +authors = ["Felix Martin "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/src/main.py b/src/main.py new file mode 100644 index 0000000..06385a6 --- /dev/null +++ b/src/main.py @@ -0,0 +1,37 @@ + +def merge(a, b): + """Merges two sorted lists""" + i, j = 0, 0 + r = [] + while i < len(a) and j < len(b): + if a[i] < b[j]: + r.append(a[i]) + i += 1 + else: + r.append(b[j]) + j += 1 + + while i < len(a): + r.append(a[i]) + i += 1 + + while j < len(b): + r.append(b[j]) + j += 1 + return r + + +def merge_sort(v): + length = len(v) + if length <= 1: + return v + + half_length = length // 2 + + a = merge_sort(v[:half_length]) + b = merge_sort(v[half_length:]) + return merge(a, b) + + +if __name__ == "__main__": + print(merge_sort([42, 12, 3, 1, 5])) diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..d59e466 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,19 @@ +use std::vec::Vec; +use std::clone::Clone; + + +fn merge_sort(v: Vec) -> Vec { + if v.len() <= 1 { + return v; + } + let sorted = v.to_vec(); + + return sorted; +} + +fn main() { + println!("Hello, world!"); + let l = vec![2,1,3]; + let l = merge_sort(l); + println!("{:?}", l); +}