diff --git a/lab2/zad3/.gitignore b/lab2/zad3/.gitignore new file mode 100644 index 0000000..2f7896d --- /dev/null +++ b/lab2/zad3/.gitignore @@ -0,0 +1 @@ +target/ diff --git a/lab2/zad3/Cargo.lock b/lab2/zad3/Cargo.lock new file mode 100644 index 0000000..29b9fc5 --- /dev/null +++ b/lab2/zad3/Cargo.lock @@ -0,0 +1,87 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "getrandom" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "libgen" +version = "0.1.0" +dependencies = [ + "rand", +] + +[[package]] +name = "libsort" +version = "0.1.0" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "zad3" +version = "0.1.0" +dependencies = [ + "libgen", + "libsort", +] diff --git a/lab2/zad3/Cargo.toml b/lab2/zad3/Cargo.toml new file mode 100644 index 0000000..3ad7379 --- /dev/null +++ b/lab2/zad3/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "zad3" +version = "0.1.0" +edition = "2021" + +[dependencies] +libgen = { path = "../zad1/libgen" } +libsort = { path = "../zad1/libsort" } diff --git a/lab2/zad3/gnuplot/k1/comp_large.gp b/lab2/zad3/gnuplot/k1/comp_large.gp new file mode 100644 index 0000000..2135c30 --- /dev/null +++ b/lab2/zad3/gnuplot/k1/comp_large.gp @@ -0,0 +1,12 @@ +set title "Average comparisons, k = 1, n ∈ {1000, 2000, ..., 50000}" +set style data lines + +set xlabel "n" +set ylabel "Average comparisons" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k1/large" \ +using 1:2 t "MergeSort", \ +"" using 1:4 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/gnuplot/k1/comp_large_n.gp b/lab2/zad3/gnuplot/k1/comp_large_n.gp new file mode 100644 index 0000000..a2e1ef7 --- /dev/null +++ b/lab2/zad3/gnuplot/k1/comp_large_n.gp @@ -0,0 +1,12 @@ +set title "Average comparisons / n, k = 1, n ∈ {1000, 2000, ..., 50000}" +set style data lines + +set xlabel "n" +set ylabel "Average comparisons / n" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k1/large" \ +using 1:6 t "MergeSort", \ +"" using 1:8 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/gnuplot/k1/comp_small.gp b/lab2/zad3/gnuplot/k1/comp_small.gp new file mode 100644 index 0000000..9a55106 --- /dev/null +++ b/lab2/zad3/gnuplot/k1/comp_small.gp @@ -0,0 +1,12 @@ +set title "Average comparisons, k = 1, n ∈ {10, 20, ..., 50}" +set style data lines + +set xlabel "n" +set ylabel "Average comparisons" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k1/small" \ +using 1:2 t "MergeSort", \ +"" using 1:4 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/gnuplot/k1/comp_small_n.gp b/lab2/zad3/gnuplot/k1/comp_small_n.gp new file mode 100644 index 0000000..9a6f3f1 --- /dev/null +++ b/lab2/zad3/gnuplot/k1/comp_small_n.gp @@ -0,0 +1,12 @@ +set title "Average comparisons / n, k = 1, n ∈ {10, 20, ..., 50}" +set style data lines + +set xlabel "n" +set ylabel "Average comparisons / n" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k1/small" \ +using 1:6 t "MergeSort", \ +"" using 1:8 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/gnuplot/k1/swap_large.gp b/lab2/zad3/gnuplot/k1/swap_large.gp new file mode 100644 index 0000000..12fcba4 --- /dev/null +++ b/lab2/zad3/gnuplot/k1/swap_large.gp @@ -0,0 +1,12 @@ +set title "Average swaps, k = 1, n ∈ {1000, 2000, ..., 50000}" +set style data lines + +set xlabel "n" +set ylabel "Average swaps" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k1/large" \ +using 1:3 t "MergeSort", \ +"" using 1:5 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/gnuplot/k1/swap_large_n.gp b/lab2/zad3/gnuplot/k1/swap_large_n.gp new file mode 100644 index 0000000..eac68ab --- /dev/null +++ b/lab2/zad3/gnuplot/k1/swap_large_n.gp @@ -0,0 +1,12 @@ +set title "Average swaps / n, k = 1, n ∈ {1000, 2000, ..., 50000}" +set style data lines + +set xlabel "n" +set ylabel "Average swaps / n" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k1/large" \ +using 1:7 t "MergeSort", \ +"" using 1:9 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/gnuplot/k1/swap_small.gp b/lab2/zad3/gnuplot/k1/swap_small.gp new file mode 100644 index 0000000..ea80aca --- /dev/null +++ b/lab2/zad3/gnuplot/k1/swap_small.gp @@ -0,0 +1,12 @@ +set title "Average swaps, k = 1, n ∈ {10, 20, ..., 50}" +set style data lines + +set xlabel "n" +set ylabel "Average swaps" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k1/small" \ +using 1:3 t "MergeSort", \ +"" using 1:5 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/gnuplot/k1/swap_small_n.gp b/lab2/zad3/gnuplot/k1/swap_small_n.gp new file mode 100644 index 0000000..d020cef --- /dev/null +++ b/lab2/zad3/gnuplot/k1/swap_small_n.gp @@ -0,0 +1,12 @@ +set title "Average swaps / n, k = 1, n ∈ {10, 20, ..., 50}" +set style data lines + +set xlabel "n" +set ylabel "Average swaps / n" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k1/small" \ +using 1:7 t "MergeSort", \ +"" using 1:9 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/gnuplot/k10/comp_large.gp b/lab2/zad3/gnuplot/k10/comp_large.gp new file mode 100644 index 0000000..a595731 --- /dev/null +++ b/lab2/zad3/gnuplot/k10/comp_large.gp @@ -0,0 +1,12 @@ +set title "Average comparisons, k = 10, n ∈ {1000, 2000, ..., 50000}" +set style data lines + +set xlabel "n" +set ylabel "Average comparisons" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k10/large" \ +using 1:2 t "MergeSort", \ +"" using 1:4 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/gnuplot/k10/comp_large_n.gp b/lab2/zad3/gnuplot/k10/comp_large_n.gp new file mode 100644 index 0000000..bd936b3 --- /dev/null +++ b/lab2/zad3/gnuplot/k10/comp_large_n.gp @@ -0,0 +1,12 @@ +set title "Average comparisons / n, k = 10, n ∈ {1000, 2000, ..., 50000}" +set style data lines + +set xlabel "n" +set ylabel "Average comparisons / n" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k10/large" \ +using 1:6 t "MergeSort", \ +"" using 1:8 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/gnuplot/k10/comp_small.gp b/lab2/zad3/gnuplot/k10/comp_small.gp new file mode 100644 index 0000000..16efefc --- /dev/null +++ b/lab2/zad3/gnuplot/k10/comp_small.gp @@ -0,0 +1,12 @@ +set title "Average comparisons, k = 10, n ∈ {10, 20, ..., 50}" +set style data lines + +set xlabel "n" +set ylabel "Average comparisons" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k10/small" \ +using 1:2 t "MergeSort", \ +"" using 1:4 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/gnuplot/k10/comp_small_n.gp b/lab2/zad3/gnuplot/k10/comp_small_n.gp new file mode 100644 index 0000000..1f86867 --- /dev/null +++ b/lab2/zad3/gnuplot/k10/comp_small_n.gp @@ -0,0 +1,12 @@ +set title "Average comparisons / n, k = 10, n ∈ {10, 20, ..., 50}" +set style data lines + +set xlabel "n" +set ylabel "Average comparisons / n" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k10/small" \ +using 1:6 t "MergeSort", \ +"" using 1:8 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/gnuplot/k10/swap_large.gp b/lab2/zad3/gnuplot/k10/swap_large.gp new file mode 100644 index 0000000..8f14aba --- /dev/null +++ b/lab2/zad3/gnuplot/k10/swap_large.gp @@ -0,0 +1,12 @@ +set title "Average swaps, k = 10, n ∈ {1000, 2000, ..., 50000}" +set style data lines + +set xlabel "n" +set ylabel "Average swaps" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k10/large" \ +using 1:3 t "MergeSort", \ +"" using 1:5 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/gnuplot/k10/swap_large_n.gp b/lab2/zad3/gnuplot/k10/swap_large_n.gp new file mode 100644 index 0000000..a074e35 --- /dev/null +++ b/lab2/zad3/gnuplot/k10/swap_large_n.gp @@ -0,0 +1,12 @@ +set title "Average swaps / n, k = 10, n ∈ {1000, 2000, ..., 50000}" +set style data lines + +set xlabel "n" +set ylabel "Average swaps / n" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k10/large" \ +using 1:7 t "MergeSort", \ +"" using 1:9 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/gnuplot/k10/swap_small.gp b/lab2/zad3/gnuplot/k10/swap_small.gp new file mode 100644 index 0000000..fa56775 --- /dev/null +++ b/lab2/zad3/gnuplot/k10/swap_small.gp @@ -0,0 +1,12 @@ +set title "Average swaps, k = 10, n ∈ {10, 20, ..., 50}" +set style data lines + +set xlabel "n" +set ylabel "Average swaps" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k10/small" \ +using 1:3 t "MergeSort", \ +"" using 1:5 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/gnuplot/k10/swap_small_n.gp b/lab2/zad3/gnuplot/k10/swap_small_n.gp new file mode 100644 index 0000000..d3658b6 --- /dev/null +++ b/lab2/zad3/gnuplot/k10/swap_small_n.gp @@ -0,0 +1,12 @@ +set title "Average swaps / n, k = 10, n ∈ {10, 20, ..., 50}" +set style data lines + +set xlabel "n" +set ylabel "Average swaps / n" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k10/small" \ +using 1:7 t "MergeSort", \ +"" using 1:9 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/gnuplot/k100/comp_large.gp b/lab2/zad3/gnuplot/k100/comp_large.gp new file mode 100644 index 0000000..47164f5 --- /dev/null +++ b/lab2/zad3/gnuplot/k100/comp_large.gp @@ -0,0 +1,12 @@ +set title "Average comparisons, k = 100, n ∈ {1000, 2000, ..., 50000}" +set style data lines + +set xlabel "n" +set ylabel "Average comparisons" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k100/large" \ +using 1:2 t "MergeSort", \ +"" using 1:4 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/gnuplot/k100/comp_large_n.gp b/lab2/zad3/gnuplot/k100/comp_large_n.gp new file mode 100644 index 0000000..2b3289f --- /dev/null +++ b/lab2/zad3/gnuplot/k100/comp_large_n.gp @@ -0,0 +1,12 @@ +set title "Average comparisons / n, k = 100, n ∈ {1000, 2000, ..., 50000}" +set style data lines + +set xlabel "n" +set ylabel "Average comparisons / n" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k100/large" \ +using 1:6 t "MergeSort", \ +"" using 1:8 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/gnuplot/k100/comp_small.gp b/lab2/zad3/gnuplot/k100/comp_small.gp new file mode 100644 index 0000000..5629110 --- /dev/null +++ b/lab2/zad3/gnuplot/k100/comp_small.gp @@ -0,0 +1,12 @@ +set title "Average comparisons, k = 100, n ∈ {10, 20, ..., 50}" +set style data lines + +set xlabel "n" +set ylabel "Average comparisons" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k100/small" \ +using 1:2 t "MergeSort", \ +"" using 1:4 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/gnuplot/k100/comp_small_n.gp b/lab2/zad3/gnuplot/k100/comp_small_n.gp new file mode 100644 index 0000000..29e9733 --- /dev/null +++ b/lab2/zad3/gnuplot/k100/comp_small_n.gp @@ -0,0 +1,12 @@ +set title "Average comparisons / n, k = 100, n ∈ {10, 20, ..., 50}" +set style data lines + +set xlabel "n" +set ylabel "Average comparisons / n" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k100/small" \ +using 1:6 t "MergeSort", \ +"" using 1:8 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/gnuplot/k100/swap_large.gp b/lab2/zad3/gnuplot/k100/swap_large.gp new file mode 100644 index 0000000..107d3b8 --- /dev/null +++ b/lab2/zad3/gnuplot/k100/swap_large.gp @@ -0,0 +1,12 @@ +set title "Average swaps, k = 100, n ∈ {1000, 2000, ..., 50000}" +set style data lines + +set xlabel "n" +set ylabel "Average swaps" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k100/large" \ +using 1:3 t "MergeSort", \ +"" using 1:5 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/gnuplot/k100/swap_large_n.gp b/lab2/zad3/gnuplot/k100/swap_large_n.gp new file mode 100644 index 0000000..b31f781 --- /dev/null +++ b/lab2/zad3/gnuplot/k100/swap_large_n.gp @@ -0,0 +1,12 @@ +set title "Average swaps / n, k = 100, n ∈ {1000, 2000, ..., 50000}" +set style data lines + +set xlabel "n" +set ylabel "Average swaps / n" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k100/large" \ +using 1:7 t "MergeSort", \ +"" using 1:9 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/gnuplot/k100/swap_small.gp b/lab2/zad3/gnuplot/k100/swap_small.gp new file mode 100644 index 0000000..3288ba1 --- /dev/null +++ b/lab2/zad3/gnuplot/k100/swap_small.gp @@ -0,0 +1,12 @@ +set title "Average swaps, k = 100, n ∈ {10, 20, ..., 50}" +set style data lines + +set xlabel "n" +set ylabel "Average swaps" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k100/small" \ +using 1:3 t "MergeSort", \ +"" using 1:5 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/gnuplot/k100/swap_small_n.gp b/lab2/zad3/gnuplot/k100/swap_small_n.gp new file mode 100644 index 0000000..4ee10f7 --- /dev/null +++ b/lab2/zad3/gnuplot/k100/swap_small_n.gp @@ -0,0 +1,12 @@ +set title "Average swaps / n, k = 100, n ∈ {10, 20, ..., 50}" +set style data lines + +set xlabel "n" +set ylabel "Average swaps / n" +set term pdfcairo font "JetBrainsMono-NF,12" + +plot "./results/k100/small" \ +using 1:7 t "MergeSort", \ +"" using 1:9 t "MySort" + +# vim: ft=gnuplot diff --git a/lab2/zad3/plots/k100_comp_large.pdf b/lab2/zad3/plots/k100_comp_large.pdf new file mode 100644 index 0000000..37a06c3 Binary files /dev/null and b/lab2/zad3/plots/k100_comp_large.pdf differ diff --git a/lab2/zad3/plots/k100_comp_large_n.pdf b/lab2/zad3/plots/k100_comp_large_n.pdf new file mode 100644 index 0000000..ccd2b1c Binary files /dev/null and b/lab2/zad3/plots/k100_comp_large_n.pdf differ diff --git a/lab2/zad3/plots/k100_comp_small.pdf b/lab2/zad3/plots/k100_comp_small.pdf new file mode 100644 index 0000000..d371957 Binary files /dev/null and b/lab2/zad3/plots/k100_comp_small.pdf differ diff --git a/lab2/zad3/plots/k100_comp_small_n.pdf b/lab2/zad3/plots/k100_comp_small_n.pdf new file mode 100644 index 0000000..861ff88 Binary files /dev/null and b/lab2/zad3/plots/k100_comp_small_n.pdf differ diff --git a/lab2/zad3/plots/k100_swap_large.pdf b/lab2/zad3/plots/k100_swap_large.pdf new file mode 100644 index 0000000..560d263 Binary files /dev/null and b/lab2/zad3/plots/k100_swap_large.pdf differ diff --git a/lab2/zad3/plots/k100_swap_large_n.pdf b/lab2/zad3/plots/k100_swap_large_n.pdf new file mode 100644 index 0000000..f2d2708 Binary files /dev/null and b/lab2/zad3/plots/k100_swap_large_n.pdf differ diff --git a/lab2/zad3/plots/k100_swap_small.pdf b/lab2/zad3/plots/k100_swap_small.pdf new file mode 100644 index 0000000..4403c69 Binary files /dev/null and b/lab2/zad3/plots/k100_swap_small.pdf differ diff --git a/lab2/zad3/plots/k100_swap_small_n.pdf b/lab2/zad3/plots/k100_swap_small_n.pdf new file mode 100644 index 0000000..141e064 Binary files /dev/null and b/lab2/zad3/plots/k100_swap_small_n.pdf differ diff --git a/lab2/zad3/plots/k10_comp_large.pdf b/lab2/zad3/plots/k10_comp_large.pdf new file mode 100644 index 0000000..fce9268 Binary files /dev/null and b/lab2/zad3/plots/k10_comp_large.pdf differ diff --git a/lab2/zad3/plots/k10_comp_large_n.pdf b/lab2/zad3/plots/k10_comp_large_n.pdf new file mode 100644 index 0000000..b18e08d Binary files /dev/null and b/lab2/zad3/plots/k10_comp_large_n.pdf differ diff --git a/lab2/zad3/plots/k10_comp_small.pdf b/lab2/zad3/plots/k10_comp_small.pdf new file mode 100644 index 0000000..c2543f2 Binary files /dev/null and b/lab2/zad3/plots/k10_comp_small.pdf differ diff --git a/lab2/zad3/plots/k10_comp_small_n.pdf b/lab2/zad3/plots/k10_comp_small_n.pdf new file mode 100644 index 0000000..f8f027b Binary files /dev/null and b/lab2/zad3/plots/k10_comp_small_n.pdf differ diff --git a/lab2/zad3/plots/k10_swap_large.pdf b/lab2/zad3/plots/k10_swap_large.pdf new file mode 100644 index 0000000..25fb096 Binary files /dev/null and b/lab2/zad3/plots/k10_swap_large.pdf differ diff --git a/lab2/zad3/plots/k10_swap_large_n.pdf b/lab2/zad3/plots/k10_swap_large_n.pdf new file mode 100644 index 0000000..58ed7f9 Binary files /dev/null and b/lab2/zad3/plots/k10_swap_large_n.pdf differ diff --git a/lab2/zad3/plots/k10_swap_small.pdf b/lab2/zad3/plots/k10_swap_small.pdf new file mode 100644 index 0000000..6eb8474 Binary files /dev/null and b/lab2/zad3/plots/k10_swap_small.pdf differ diff --git a/lab2/zad3/plots/k10_swap_small_n.pdf b/lab2/zad3/plots/k10_swap_small_n.pdf new file mode 100644 index 0000000..1c4c199 Binary files /dev/null and b/lab2/zad3/plots/k10_swap_small_n.pdf differ diff --git a/lab2/zad3/plots/k1_comp_large.pdf b/lab2/zad3/plots/k1_comp_large.pdf new file mode 100644 index 0000000..7219d17 Binary files /dev/null and b/lab2/zad3/plots/k1_comp_large.pdf differ diff --git a/lab2/zad3/plots/k1_comp_large_n.pdf b/lab2/zad3/plots/k1_comp_large_n.pdf new file mode 100644 index 0000000..6773a5b Binary files /dev/null and b/lab2/zad3/plots/k1_comp_large_n.pdf differ diff --git a/lab2/zad3/plots/k1_comp_small.pdf b/lab2/zad3/plots/k1_comp_small.pdf new file mode 100644 index 0000000..0fe7bfb Binary files /dev/null and b/lab2/zad3/plots/k1_comp_small.pdf differ diff --git a/lab2/zad3/plots/k1_comp_small_n.pdf b/lab2/zad3/plots/k1_comp_small_n.pdf new file mode 100644 index 0000000..fa96e45 Binary files /dev/null and b/lab2/zad3/plots/k1_comp_small_n.pdf differ diff --git a/lab2/zad3/plots/k1_swap_large.pdf b/lab2/zad3/plots/k1_swap_large.pdf new file mode 100644 index 0000000..b4e3cf6 Binary files /dev/null and b/lab2/zad3/plots/k1_swap_large.pdf differ diff --git a/lab2/zad3/plots/k1_swap_large_n.pdf b/lab2/zad3/plots/k1_swap_large_n.pdf new file mode 100644 index 0000000..604803a Binary files /dev/null and b/lab2/zad3/plots/k1_swap_large_n.pdf differ diff --git a/lab2/zad3/plots/k1_swap_small.pdf b/lab2/zad3/plots/k1_swap_small.pdf new file mode 100644 index 0000000..abbde22 Binary files /dev/null and b/lab2/zad3/plots/k1_swap_small.pdf differ diff --git a/lab2/zad3/plots/k1_swap_small_n.pdf b/lab2/zad3/plots/k1_swap_small_n.pdf new file mode 100644 index 0000000..2e38869 Binary files /dev/null and b/lab2/zad3/plots/k1_swap_small_n.pdf differ diff --git a/lab2/zad3/results/k1/large b/lab2/zad3/results/k1/large new file mode 100644 index 0000000..3478ff3 --- /dev/null +++ b/lab2/zad3/results/k1/large @@ -0,0 +1,50 @@ +1000 8673 9976 0 0 8.673 9.976 0 0 +2000 19398 21952 0 0 9.699 10.976 0 0 +3000 30887 34904 0 0 10.295666666666667 11.634666666666666 0 0 +4000 42846 47904 0 0 10.7115 11.976 0 0 +5000 55247 61808 0 0 11.0494 12.3616 0 0 +6000 67803 75808 0 0 11.3005 12.634666666666666 0 0 +7000 80722 89808 0 0 11.531714285714285 12.829714285714285 0 0 +8000 93668 103808 0 0 11.7085 12.976 0 0 +9000 106973 118616 0 0 11.88588888888889 13.179555555555556 0 0 +10000 120515 133616 0 0 12.0515 13.3616 0 0 +11000 134055 148616 0 0 12.186818181818182 13.510545454545454 0 0 +12000 147651 163616 0 0 12.30425 13.634666666666666 0 0 +13000 161484 178616 0 0 12.421846153846154 13.739692307692307 0 0 +14000 175300 193616 0 0 12.521428571428572 13.829714285714285 0 0 +15000 189292 208616 0 0 12.619466666666666 13.907733333333333 0 0 +16000 203405 223616 0 0 12.7128125 13.976 0 0 +17000 217647 239232 0 0 12.802764705882353 14.072470588235294 0 0 +18000 232012 255232 0 0 12.889555555555555 14.179555555555556 0 0 +19000 246375 271232 0 0 12.967105263157896 14.275368421052631 0 0 +20000 260902 287232 0 0 13.0451 14.3616 0 0 +21000 275522 303232 0 0 13.120095238095239 14.439619047619047 0 0 +22000 290140 319232 0 0 13.188181818181818 14.510545454545454 0 0 +23000 304633 335232 0 0 13.244913043478261 14.575304347826087 0 0 +24000 319410 351232 0 0 13.30875 14.634666666666666 0 0 +25000 333969 367232 0 0 13.35876 14.68928 0 0 +26000 348975 383232 0 0 13.422115384615385 14.739692307692307 0 0 +27000 363629 399232 0 0 13.46774074074074 14.78637037037037 0 0 +28000 378857 415232 0 0 13.530607142857143 14.829714285714285 0 0 +29000 393683 431232 0 0 13.575275862068965 14.870068965517241 0 0 +30000 408503 447232 0 0 13.616766666666667 14.907733333333333 0 0 +31000 423472 463232 0 0 13.660387096774194 14.942967741935483 0 0 +32000 438513 479232 0 0 13.70353125 14.976 0 0 +33000 453823 495464 0 0 13.752212121212121 15.014060606060607 0 0 +34000 468989 512464 0 0 13.793794117647058 15.072470588235294 0 0 +35000 484477 529464 0 0 13.8422 15.127542857142856 0 0 +36000 499974 546464 0 0 13.888166666666667 15.179555555555556 0 0 +37000 515463 563464 0 0 13.931432432432432 15.228756756756757 0 0 +38000 530839 580464 0 0 13.969447368421053 15.275368421052631 0 0 +39000 546316 597464 0 0 14.008102564102565 15.319589743589743 0 0 +40000 561781 614464 0 0 14.044525 15.3616 0 0 +41000 577116 631464 0 0 14.076 15.401560975609756 0 0 +42000 592927 648464 0 0 14.117309523809524 15.439619047619047 0 0 +43000 608475 665464 0 0 14.150581395348837 15.475906976744186 0 0 +44000 624359 682464 0 0 14.189977272727273 15.510545454545454 0 0 +45000 639519 699464 0 0 14.211533333333334 15.543644444444444 0 0 +46000 655526 716464 0 0 14.250565217391305 15.575304347826087 0 0 +47000 670997 733464 0 0 14.276531914893617 15.605617021276595 0 0 +48000 686741 750464 0 0 14.307104166666667 15.634666666666666 0 0 +49000 702202 767464 0 0 14.33065306122449 15.662530612244899 0 0 +50000 718211 784464 0 0 14.36422 15.68928 0 0 diff --git a/lab2/zad3/results/k1/small b/lab2/zad3/results/k1/small new file mode 100644 index 0000000..1069a1a --- /dev/null +++ b/lab2/zad3/results/k1/small @@ -0,0 +1,5 @@ +10 25 34 0 0 2.5 3.4 0 0 +20 64 88 0 0 3.2 4.4 0 0 +30 106 148 0 0 3.533333333333333 4.933333333333334 0 0 +40 164 216 0 0 4.1 5.4 0 0 +50 216 286 0 0 4.32 5.72 0 0 diff --git a/lab2/zad3/results/k10/large b/lab2/zad3/results/k10/large new file mode 100644 index 0000000..1c2be9f --- /dev/null +++ b/lab2/zad3/results/k10/large @@ -0,0 +1,50 @@ +1000 8711.5 9976 0 0 8.7115 9.976 0 0 +2000 19422.2 21952 0 0 9.7111 10.976 0 0 +3000 30942.7 34904 0 0 10.314233333333334 11.634666666666666 0 0 +4000 42809.4 47904 0 0 10.702350000000001 11.976 0 0 +5000 55228.3 61808 0 0 11.04566 12.3616 0 0 +6000 67825.4 75808 0 0 11.304233333333332 12.634666666666666 0 0 +7000 80679.6 89808 0 0 11.525657142857144 12.829714285714285 0 0 +8000 93640.4 103808 0 0 11.70505 12.976 0 0 +9000 107003.2 118616 0 0 11.889244444444444 13.179555555555556 0 0 +10000 120464 133616 0 0 12.0464 13.3616 0 0 +11000 134030.3 148616 0 0 12.184572727272727 13.510545454545454 0 0 +12000 147662.7 163616 0 0 12.305225000000002 13.634666666666666 0 0 +13000 161476.3 178616 0 0 12.421253846153846 13.739692307692307 0 0 +14000 175392.4 193616 0 0 12.528028571428571 13.829714285714285 0 0 +15000 189291.7 208616 0 0 12.619446666666667 13.907733333333333 0 0 +16000 203298.2 223616 0 0 12.7061375 13.976 0 0 +17000 217562.3 239232 0 0 12.797782352941176 14.072470588235294 0 0 +18000 231914.1 255232 0 0 12.884116666666667 14.179555555555556 0 0 +19000 246395 271232 0 0 12.968157894736843 14.275368421052631 0 0 +20000 260881 287232 0 0 13.04405 14.3616 0 0 +21000 275425 303232 0 0 13.11547619047619 14.439619047619047 0 0 +22000 290012.2 319232 0 0 13.182372727272728 14.510545454545454 0 0 +23000 304705.5 335232 0 0 13.248065217391304 14.575304347826087 0 0 +24000 319352.9 351232 0 0 13.306370833333334 14.634666666666666 0 0 +25000 334111 367232 0 0 13.36444 14.68928 0 0 +26000 348940.9 383232 0 0 13.420803846153847 14.739692307692307 0 0 +27000 363869.1 399232 0 0 13.476633333333332 14.78637037037037 0 0 +28000 378703.5 415232 0 0 13.525125 14.829714285714285 0 0 +29000 393650.7 431232 0 0 13.574162068965517 14.870068965517241 0 0 +30000 408580.5 447232 0 0 13.61935 14.907733333333333 0 0 +31000 423581.3 463232 0 0 13.663912903225807 14.942967741935483 0 0 +32000 438566.1 479232 0 0 13.705190624999998 14.976 0 0 +33000 453670 495464 0 0 13.747575757575758 15.014060606060607 0 0 +34000 469045.5 512464 0 0 13.795455882352941 15.072470588235294 0 0 +35000 484428.7 529464 0 0 13.84082 15.127542857142856 0 0 +36000 499839.5 546464 0 0 13.884430555555555 15.179555555555556 0 0 +37000 515296.9 563464 0 0 13.926943243243244 15.228756756756757 0 0 +38000 530794.1 580464 0 0 13.968265789473683 15.275368421052631 0 0 +39000 546310.5 597464 0 0 14.007961538461538 15.319589743589743 0 0 +40000 561804.8 614464 0 0 14.04512 15.3616 0 0 +41000 577293.2 631464 0 0 14.080321951219512 15.401560975609756 0 0 +42000 592914.4 648464 0 0 14.117009523809525 15.439619047619047 0 0 +43000 608527.6 665464 0 0 14.15180465116279 15.475906976744186 0 0 +44000 624184.5 682464 0 0 14.186011363636364 15.510545454545454 0 0 +45000 639718.5 699464 0 0 14.215966666666667 15.543644444444444 0 0 +46000 655369 716464 0 0 14.247152173913044 15.575304347826087 0 0 +47000 671011.8 733464 0 0 14.276846808510639 15.605617021276595 0 0 +48000 686625.9 750464 0 0 14.30470625 15.634666666666666 0 0 +49000 702414.1 767464 0 0 14.334981632653061 15.662530612244899 0 0 +50000 718162.4 784464 0 0 14.363248 15.68928 0 0 diff --git a/lab2/zad3/results/k10/small b/lab2/zad3/results/k10/small new file mode 100644 index 0000000..f29bf28 --- /dev/null +++ b/lab2/zad3/results/k10/small @@ -0,0 +1,5 @@ +10 23.1 34 0 0 2.31 3.4 0 0 +20 62.7 88 0 0 3.1350000000000002 4.4 0 0 +30 111.2 148 0 0 3.7066666666666666 4.933333333333334 0 0 +40 164.5 216 0 0 4.1125 5.4 0 0 +50 223.1 286 0 0 4.462 5.72 0 0 diff --git a/lab2/zad3/results/k100/large b/lab2/zad3/results/k100/large new file mode 100644 index 0000000..3a64e2c --- /dev/null +++ b/lab2/zad3/results/k100/large @@ -0,0 +1,50 @@ +1000 8710.58 9976 0 0 8.71058 9.976 0 0 +2000 19409.17 21952 0 0 9.704585 10.976 0 0 +3000 30921.46 34904 0 0 10.307153333333334 11.634666666666666 0 0 +4000 42817.8 47904 0 0 10.704450000000001 11.976 0 0 +5000 55227.25 61808 0 0 11.04545 12.3616 0 0 +6000 67838.23 75808 0 0 11.306371666666665 12.634666666666666 0 0 +7000 80684.73 89808 0 0 11.52639 12.829714285714285 0 0 +8000 93644.96 103808 0 0 11.705620000000001 12.976 0 0 +9000 106969.59 118616 0 0 11.88551 13.179555555555556 0 0 +10000 120439.66 133616 0 0 12.043966000000001 13.3616 0 0 +11000 134037.86 148616 0 0 12.18526 13.510545454545454 0 0 +12000 147676.12 163616 0 0 12.306343333333333 13.634666666666666 0 0 +13000 161463.97 178616 0 0 12.420305384615384 13.739692307692307 0 0 +14000 175356.22 193616 0 0 12.525444285714286 13.829714285714285 0 0 +15000 189299.45 208616 0 0 12.619963333333335 13.907733333333333 0 0 +16000 203295.97 223616 0 0 12.705998125 13.976 0 0 +17000 217535.7 239232 0 0 12.796217647058825 14.072470588235294 0 0 +18000 231946.55 255232 0 0 12.885919444444443 14.179555555555556 0 0 +19000 246392.21 271232 0 0 12.968011052631578 14.275368421052631 0 0 +20000 260890.62 287232 0 0 13.044531 14.3616 0 0 +21000 275441.83 303232 0 0 13.11627761904762 14.439619047619047 0 0 +22000 290057.1 319232 0 0 13.184413636363635 14.510545454545454 0 0 +23000 304699.13 335232 0 0 13.247788260869566 14.575304347826087 0 0 +24000 319341.56 351232 0 0 13.305898333333333 14.634666666666666 0 0 +25000 334095.67 367232 0 0 13.3638268 14.68928 0 0 +26000 348950.95 383232 0 0 13.421190384615386 14.739692307692307 0 0 +27000 363828.23 399232 0 0 13.47511962962963 14.78637037037037 0 0 +28000 378717.58 415232 0 0 13.525627857142858 14.829714285714285 0 0 +29000 393633.61 431232 0 0 13.573572758620688 14.870068965517241 0 0 +30000 408595.77 447232 0 0 13.619859 14.907733333333333 0 0 +31000 423563.66 463232 0 0 13.663343870967742 14.942967741935483 0 0 +32000 438575.72 479232 0 0 13.70549125 14.976 0 0 +33000 453652.68 495464 0 0 13.747050909090909 15.014060606060607 0 0 +34000 469084.18 512464 0 0 13.796593529411764 15.072470588235294 0 0 +35000 484456.91 529464 0 0 13.841626 15.127542857142856 0 0 +36000 499892.69 546464 0 0 13.885908055555555 15.179555555555556 0 0 +37000 515351.91 563464 0 0 13.928429999999999 15.228756756756757 0 0 +38000 530822.55 580464 0 0 13.969014473684211 15.275368421052631 0 0 +39000 546301.31 597464 0 0 14.007725897435899 15.319589743589743 0 0 +40000 561799.43 614464 0 0 14.044985750000002 15.3616 0 0 +41000 577307.71 631464 0 0 14.080675853658535 15.401560975609756 0 0 +42000 592886.26 648464 0 0 14.116339523809524 15.439619047619047 0 0 +43000 608513.61 665464 0 0 14.151479302325582 15.475906976744186 0 0 +44000 624144.43 682464 0 0 14.185100681818183 15.510545454545454 0 0 +45000 639737 699464 0 0 14.216377777777778 15.543644444444444 0 0 +46000 655359.63 716464 0 0 14.246948478260869 15.575304347826087 0 0 +47000 671042.97 733464 0 0 14.27751 15.605617021276595 0 0 +48000 686707.56 750464 0 0 14.3064075 15.634666666666666 0 0 +49000 702373.58 767464 0 0 14.33415469387755 15.662530612244899 0 0 +50000 718186.88 784464 0 0 14.3637376 15.68928 0 0 diff --git a/lab2/zad3/results/k100/small b/lab2/zad3/results/k100/small new file mode 100644 index 0000000..e1527fd --- /dev/null +++ b/lab2/zad3/results/k100/small @@ -0,0 +1,5 @@ +10 22.76 34 0 0 2.2760000000000002 3.4 0 0 +20 63.65 88 0 0 3.1825 4.4 0 0 +30 111.6 148 0 0 3.7199999999999998 4.933333333333334 0 0 +40 165.9 216 0 0 4.1475 5.4 0 0 +50 222.59 286 0 0 4.4518 5.72 0 0 diff --git a/lab2/zad3/src/main.rs b/lab2/zad3/src/main.rs new file mode 100644 index 0000000..9d6e5e3 --- /dev/null +++ b/lab2/zad3/src/main.rs @@ -0,0 +1,178 @@ +mod merge; +mod mergesort; +mod mysort; + +use std::{collections::HashMap, env::args, fs::{self, OpenOptions}, io::{self, Write}}; + +use libgen::gen_rand; +use libsort::{is_sorted, print_list, SortResult}; +use mergesort::mergesort; + +use crate::mysort::mysort; + +fn comp_avg(results_map: &HashMap>) -> HashMap { + results_map.iter() + .map(|(i, results)| + (*i, (results.iter() + .map(|res| res.comparisons) + .sum::() as f64 / results.len() as f64))) + .collect() +} + +fn swap_avg(results_map: &HashMap>) -> HashMap { + results_map.iter() + .map(|(i, results)| + (*i, (results.iter() + .map(|res| res.swaps) + .sum::() as f64 / results.len() as f64))) + .collect() +} + +fn sort_stdin() -> io::Result<()> { + let mut buffer = String::new(); + + let stdin = io::stdin(); + + stdin.read_line(&mut buffer)?; + + let list_len = buffer.trim().parse::().expect("array length has to be u64"); + buffer.clear(); + + let mut list: Vec = vec![]; + + for i in 0..list_len { + stdin.read_line(&mut buffer)?; + list.push( + buffer.trim().parse::() + .expect(format!("element {} has to be u64", i).as_str()) + ); + buffer.clear(); + } + + let input_list = list.clone(); + + let print = input_list.len() < 40; + + if print { + print!("input: "); + print_list(&input_list); + println!(); + } + + let res = mysort(&mut list); + + if print { + println!(); + print!("input: "); + print_list(&input_list); + println!(); + print!("output: "); + print_list(&list); + } + + println!("swaps: {}", res.swaps); + println!("comparisons: {}", res.comparisons); + + println!("is sorted: {}", is_sorted(&list)); + + Ok(()) +} + +fn main() -> io::Result<()> { + if args().len() == 1 { + return sort_stdin(); + } + + let k = args().nth(1) + .expect(format!("usage: {} ", args().nth(0).unwrap()).as_str()) + .parse::() + .expect("k must be u64"); + + let mut merge_results_small: HashMap> = HashMap::new(); + let mut my_results_small: HashMap> = HashMap::new(); + + for n in (10..=50).step_by(10) { + merge_results_small.insert(n, vec![]); + my_results_small.insert(n, vec![]); + for _ in 0..k { + let mut res = SortResult::default(); + mergesort(&mut gen_rand(n), &mut res); + merge_results_small.get_mut(&n).unwrap().push(res); + my_results_small.get_mut(&n).unwrap().push(mysort(&mut gen_rand(n))); + } + } + + let mut merge_results_large: HashMap> = HashMap::new(); + let mut my_results_large: HashMap> = HashMap::new(); + + for n in (1000..=50000).step_by(1000) { + merge_results_large.insert(n, vec![]); + my_results_large.insert(n, vec![]); + for _ in 0..k { + let mut res = SortResult::default(); + mergesort(&mut gen_rand(n), &mut res); + merge_results_large.get_mut(&n).unwrap().push(res); + my_results_large.get_mut(&n).unwrap().push(mysort(&mut gen_rand(n))); + } + } + + let merge_comp_averages_small = comp_avg(&merge_results_small); + + let merge_swap_averages_small = swap_avg(&merge_results_small); + + let merge_comp_averages_large = comp_avg(&merge_results_large); + + let merge_swap_averages_large = swap_avg(&merge_results_large); + + let my_comp_averages_small = comp_avg(&my_results_small); + + let my_swap_averages_small = swap_avg(&my_results_small); + + let my_comp_averages_large = comp_avg(&my_results_large); + + let my_swap_averages_large = swap_avg(&my_results_large); + + _ = fs::create_dir_all(format!("./results/k{k}")); + + _ = fs::remove_file(format!("./results/k{k}/small")); + + let mut small = OpenOptions::new() + .create(true) + .append(true) + .open(format!("./results/k{k}/small"))?; + + for n in (10..=50).step_by(10) { + writeln!(small, "{n} {} {} {} {} {} {} {} {}", + merge_comp_averages_small[&n], + merge_swap_averages_small[&n], + my_comp_averages_small[&n], + my_swap_averages_small[&n], + merge_comp_averages_small[&n] / n as f64, + merge_swap_averages_small[&n] / n as f64, + my_comp_averages_small[&n] / n as f64, + my_swap_averages_small[&n] / n as f64, + )?; + } + + _ = fs::remove_file(format!("./results/k{k}/large")); + + let mut large = OpenOptions::new() + .create(true) + .append(true) + .open(format!("./results/k{k}/large"))?; + + for n in (1000..=50000).step_by(1000) { + writeln!(large, "{n} {} {} {} {} {} {} {} {}", + merge_comp_averages_large[&n], + merge_swap_averages_large[&n], + my_comp_averages_large[&n], + my_swap_averages_large[&n], + merge_comp_averages_large[&n] / n as f64, + merge_swap_averages_large[&n] / n as f64, + my_comp_averages_large[&n] / n as f64, + my_swap_averages_large[&n] / n as f64, + )?; + } + + Ok(()) +} diff --git a/lab2/zad3/src/merge.rs b/lab2/zad3/src/merge.rs new file mode 100644 index 0000000..7bab7aa --- /dev/null +++ b/lab2/zad3/src/merge.rs @@ -0,0 +1,34 @@ +use libsort::{compare, CompareResult::*, SortResult}; + +pub fn merge(list1: &[u64], list2: &[u64], res: &mut SortResult) -> Vec { + let mut ret = vec![]; + + let mut i = 0; + let mut j = 0; + + while i < list1.len() && j < list2.len() { + if compare(list1[i], list2[j], &mut res.comparisons) == LESS { + ret.push(list1[i]); + i = i + 1; + } else { + ret.push(list2[j]); + j = j + 1; + } + } + + if i < list1.len() { + while i < list1.len() { + ret.push(list1[i]); + i = i + 1; + } + } + + if j < list2.len() { + while j < list2.len() { + ret.push(list2[j]); + j = j + 1; + } + } + + ret +} diff --git a/lab2/zad3/src/mergesort.rs b/lab2/zad3/src/mergesort.rs new file mode 100644 index 0000000..5935b9e --- /dev/null +++ b/lab2/zad3/src/mergesort.rs @@ -0,0 +1,16 @@ +use libsort::SortResult; + +use crate::merge::merge; + +pub fn mergesort(list: &[u64], res: &mut SortResult) -> Vec { + if list.len() > 1 { + let size = list.len() / 2; + let left = mergesort(&list[0..size], res); + let right = mergesort(&list[size..], res); + let merged = merge(&left, &right, res); + + return merged; + } + + list.to_vec() +} diff --git a/lab2/zad3/src/mysort.rs b/lab2/zad3/src/mysort.rs new file mode 100644 index 0000000..61a7093 --- /dev/null +++ b/lab2/zad3/src/mysort.rs @@ -0,0 +1,70 @@ +use libsort::{compare, CompareResult::*, SortResult}; + +use crate::merge::merge; + +fn extend_run_left(list: &[u64], mut i: usize, res: &mut SortResult) -> usize { + while i > 0 && compare(list[i - 1], list[i], &mut res.comparisons) != GREATER { + i -= 1; + } + + i +} + +fn extend_run_right(list: &[u64], mut i: usize, res: &mut SortResult) -> usize { + while i < list.len() - 1 && compare(list[i], list[i + 1], &mut res.comparisons) != GREATER { + i += 1; + } + + i +} + +fn _mysort(list: &mut [u64], low: usize, high: usize, e: usize, s: usize) -> SortResult { + let mut res = SortResult::default(); + + if e == high || s == low { + return res; + } + let mid = low + (high - low) / 2; + + if mid <= e { + let res1 = _mysort(list, e + 1, high, e + 1, s); + list.copy_from_slice(&merge(&list[low..=e], &list[(e + 1)..=high], &mut res)); + + res.comparisons += res1.comparisons; + res.swaps += res1.swaps; + } else if mid >= s { + let res1 = _mysort(list, low, s - 1, e, s - 1); + list.copy_from_slice(&merge(&list[low..=(s - 1)], &list[s..=high], &mut res)); + + res.comparisons += res1.comparisons; + res.swaps += res1.swaps; + } else { + let i = extend_run_left(list, low, &mut res); + let j = extend_run_right(list, high, &mut res); + if i == low && j == high { + return res; + } + + if mid - i < j - mid { + let res1 = _mysort(list, low, i - 1, e, i - 1); + let res2 = _mysort(list, i, high, j, s); + list.copy_from_slice(&merge(&list[low..=(i - 1)], &list[i..=high], &mut res)); + + res.comparisons += res1.comparisons + res2.comparisons; + res.swaps += res1.swaps + res2.swaps; + } else { + let res1 = _mysort(list, low, j, e, i); + let res2 = _mysort(list, j + 1, high, j + 1, s); + list.copy_from_slice(&merge(&list[low..=j], &list[(j + 1)..=high], &mut res)); + + res.comparisons += res1.comparisons + res2.comparisons; + res.swaps += res1.swaps + res2.swaps; + } + } + + res +} + +pub fn mysort(list: &mut [u64]) -> SortResult { + _mysort(list, 0, list.len() - 1, 0, list.len() - 1) +}