summaryrefslogtreecommitdiff
path: root/2_anno/Algoritmi/data_structures/heap.rs
diff options
context:
space:
mode:
authorSanto Cariotti <santo@dcariotti.me>2021-02-06 19:56:36 +0100
committerSanto Cariotti <santo@dcariotti.me>2021-02-06 19:56:36 +0100
commitd2edbc38cac8da52f58c5cd3da6c0c625fa05736 (patch)
treea51e9a4e56fc9d4c7c9e37576dceedca3a0c72b4 /2_anno/Algoritmi/data_structures/heap.rs
parent98f34040820dc3a964b7be59a698323e8cc6c8a3 (diff)
conf: rename
Diffstat (limited to '2_anno/Algoritmi/data_structures/heap.rs')
-rw-r--r--2_anno/Algoritmi/data_structures/heap.rs115
1 files changed, 0 insertions, 115 deletions
diff --git a/2_anno/Algoritmi/data_structures/heap.rs b/2_anno/Algoritmi/data_structures/heap.rs
deleted file mode 100644
index 9dde55c..0000000
--- a/2_anno/Algoritmi/data_structures/heap.rs
+++ /dev/null
@@ -1,115 +0,0 @@
-struct Heap<T> {
- array: [T; 32],
- is_minheap: bool,
- size: usize,
-}
-
-impl<T> Heap<T>
-where
- T: PartialOrd + Copy + Default,
-{
- fn new() -> Self {
- Heap {
- array: [T::default(); 32],
- is_minheap: false,
- size: 0,
- }
- }
-
- fn insert(&mut self, k: T) {
- self.size += 1;
- self.array[self.size] = k;
- let mut i = self.size;
-
- while i > 1 && self.compare(i >> 1, i) {
- let temp = self.array[i];
- self.array[i] = self.array[i >> 1];
- self.array[i >> 1] = temp;
- i >>= 1;
- }
- }
-
- fn heapify(&mut self, i: usize) {
- let l = i << 1;
- let r = l | 1;
-
- let mut max = i;
- if l <= self.size && !self.compare(l, max) {
- max = l;
- }
- if r <= self.size && !self.compare(r, max) {
- max = r;
- }
-
- if max != i {
- let temp = self.array[i];
- self.array[i] = self.array[max];
- self.array[max] = temp;
- self.heapify(max);
- }
- }
-
- fn extract(&mut self) -> T {
- let temp = self.array[1];
- self.array[1] = self.array[self.size];
- self.array[self.size] = temp;
- self.size -= 1;
-
- self.heapify(1);
-
- self.array[self.size + 1]
- }
-
- fn compare(&self, x: usize, y: usize) -> bool {
- match self.is_minheap {
- false => self.array[x] < self.array[y],
- true => self.array[x] > self.array[y],
- }
- }
-}
-
-fn build<T: PartialOrd + Copy + Default>(array: [T; 32], n: usize) -> Heap<T> {
- let mut heap = Heap::<T>::new();
-
- heap.size = n;
- heap.array = array;
-
- for i in (1..=n / 2).rev() {
- heap.heapify(i);
- }
-
- heap
-}
-
-fn heapsort<T: PartialOrd + Copy + Default>(array: [T; 32], n: usize) -> [T; 32] {
- let mut heap = build(array, n);
- let mut arr: [T; 32] = [T::default(); 32];
- for i in (0..n).rev() {
- arr[i] = heap.extract();
- }
-
- arr
-}
-
-fn main() {
- let mut h = Heap::<i32>::new();
- println!("{:?}", h.array);
- h.insert(5);
- h.insert(24);
- h.insert(1);
- h.insert(12);
- h.insert(35);
- h.insert(-1);
- println!("{:?}\n", h.array);
-
- let mut arr: [i32; 32] = [0; 32];
- arr[1] = 5;
- arr[2] = 24;
- arr[3] = 1;
- arr[4] = 12;
- arr[5] = 35;
- arr[6] = -1;
- println!("{:?}", &arr);
- let hh = heapsort(arr, 6);
- println!("{:?}", hh);
-}