Work on assignment 3
This commit is contained in:
10000
data/course_1_assignment_3.txt
Normal file
10000
data/course_1_assignment_3.txt
Normal file
File diff suppressed because it is too large
Load Diff
27
src/main.rs
27
src/main.rs
@@ -1,4 +1,7 @@
|
|||||||
mod merge_sort;
|
mod merge_sort;
|
||||||
|
mod quick_sort;
|
||||||
|
|
||||||
|
use crate::quick_sort::quick_sort;
|
||||||
use crate::merge_sort::merge_sort_inversions;
|
use crate::merge_sort::merge_sort_inversions;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io;
|
use std::io;
|
||||||
@@ -20,13 +23,29 @@ fn read_to_vector(path: &str) -> Result<Vec<i64>, io::Error> {
|
|||||||
Ok(v)
|
Ok(v)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn c1a2() {
|
fn c1a2() {
|
||||||
let vec = read_to_vector("data/week_2_assignment_2.txt").unwrap();
|
let vec = read_to_vector("data/course_1_assignment_2.txt").unwrap();
|
||||||
let (_sorted, inversions) = merge_sort_inversions(vec);
|
let (_sorted, inversions) = merge_sort_inversions(vec);
|
||||||
// println!("{:?}", sorted.len());
|
|
||||||
println!("course 1 assignment 2: {:?}", inversions);
|
println!("course 1 assignment 2: {:?}", inversions);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn c1a3() {
|
||||||
c1a2();
|
// let mut vec = read_to_vector("data/course_1_assignment_3.txt").unwrap();
|
||||||
|
let mut vec = vec![2, 20, 1, 15, 3, 11, 13, 6, 16, 10, 19, 5, 4, 9, 8, 14, 18, 17, 7, 12];
|
||||||
|
let mut comp_acc: usize = 0;
|
||||||
|
quick_sort(&mut vec, &mut comp_acc);
|
||||||
|
// println!("{:?}", vec);
|
||||||
|
println!("{:?}", comp_acc);
|
||||||
|
println!("{:?}", 3/2);
|
||||||
|
/*
|
||||||
|
1: 162085
|
||||||
|
2: 164123
|
||||||
|
3: ?
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
//c1a2();
|
||||||
|
c1a3();
|
||||||
}
|
}
|
||||||
|
|||||||
61
src/quick_sort.rs
Normal file
61
src/quick_sort.rs
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
use std::cmp::PartialOrd;
|
||||||
|
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
fn median_of_three<T: PartialOrd + std::fmt::Debug>( v: &[T]) -> usize {
|
||||||
|
if v.len() < 3 {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
let left = 0;
|
||||||
|
let middle = if v.len() % 2 == 0 {
|
||||||
|
v.len() / 2 - 1
|
||||||
|
} else {
|
||||||
|
v.len() / 2
|
||||||
|
};
|
||||||
|
let right = v.len() - 1;
|
||||||
|
|
||||||
|
/* TODO: finish here */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
fn bubble_sort<T: PartialOrd>( v: &mut [T]) -> () {
|
||||||
|
let mut unsorted = true;
|
||||||
|
if v.len() <= 1 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
while unsorted {
|
||||||
|
unsorted = false;
|
||||||
|
for i in 0..v.len() - 1 {
|
||||||
|
if v[i] > v[i + 1] {
|
||||||
|
v.swap(i, i + 1);
|
||||||
|
unsorted = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn quick_sort<T: PartialOrd + std::fmt::Debug>( v: &mut [T], comp_acc: &mut usize) -> () {
|
||||||
|
if v.len() <= 1 {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// let pivot_index = 0;
|
||||||
|
// let pivot_index = v.len() - 1;
|
||||||
|
let pivot_index = median_of_three(&v);
|
||||||
|
let mut i = 1;
|
||||||
|
v.swap(0, pivot_index);
|
||||||
|
for j in 1..v.len() {
|
||||||
|
if v[j] < v[0] {
|
||||||
|
v.swap(i, j);
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
v.swap(0, i - 1);
|
||||||
|
quick_sort(&mut v[..i - 1], comp_acc);
|
||||||
|
quick_sort(&mut v[i..], comp_acc);
|
||||||
|
|
||||||
|
*comp_acc += v[..i - 1].len();
|
||||||
|
*comp_acc += v[i..].len();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user