Finish week 1 problem set and merge sort in Rust
This commit is contained in:
37
src/main.py
37
src/main.py
@@ -1,37 +0,0 @@
|
||||
|
||||
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]))
|
||||
54
src/main.rs
54
src/main.rs
@@ -1,19 +1,57 @@
|
||||
use std::vec::Vec;
|
||||
use std::clone::Clone;
|
||||
use std::cmp::PartialOrd;
|
||||
use std::marker::Copy;
|
||||
use std::vec::Vec;
|
||||
|
||||
fn merge<T: Clone + PartialOrd + Copy>(a: Vec<T>, b: Vec<T>) -> Vec<T> {
|
||||
let mut r = vec![];
|
||||
let mut i = 0;
|
||||
let mut j = 0;
|
||||
|
||||
fn merge_sort<T: Clone>(v: Vec<T>) -> Vec<T> {
|
||||
if v.len() <= 1 {
|
||||
return v;
|
||||
}
|
||||
let sorted = v.to_vec();
|
||||
while i < a.len() && j < b.len() {
|
||||
if a[i] < b[j] {
|
||||
r.push(a[i]);
|
||||
i += 1;
|
||||
} else {
|
||||
r.push(b[j]);
|
||||
j += 1;
|
||||
}
|
||||
}
|
||||
|
||||
return sorted;
|
||||
while i < a.len() {
|
||||
r.push(a[i]);
|
||||
i += 1;
|
||||
}
|
||||
|
||||
while j < b.len() {
|
||||
r.push(b[j]);
|
||||
j += 1;
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
fn merge_sort<T: Clone + PartialOrd + Copy>(v: Vec<T>) -> Vec<T> {
|
||||
if v.len() <= 1 {
|
||||
return v;
|
||||
}
|
||||
let i = v.len() / 2;
|
||||
let a = merge_sort((&v[..i]).to_vec());
|
||||
let b = merge_sort((&v[i..]).to_vec());
|
||||
let r = merge(a, b);
|
||||
return r;
|
||||
}
|
||||
|
||||
fn mult_bin(a: i64, b: i64) -> i64 {
|
||||
return a * b;
|
||||
}
|
||||
|
||||
fn main() {
|
||||
println!("Hello, world!");
|
||||
let l = vec![2,1,3];
|
||||
let l = vec![4, 2, 1, 3];
|
||||
let l = merge_sort(l);
|
||||
println!("{:?}", l);
|
||||
|
||||
let r = mult_bin(42, 21);
|
||||
println!("{:?}", r);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user