@@ -71,6 +71,46 @@ fn merge(input: Vec<i32>, left: usize, middle: usize, right: usize) -> Vec<i32>
71
71
return sorted;
72
72
}
73
73
74
+ /*
75
+
76
+ MERGE SORT
77
+
78
+ */
79
+ pub fn heap_sort ( input : Vec < i32 > ) -> Vec < i32 > {
80
+ let mut sorted: Vec < i32 > = input;
81
+ let input_len: usize = sorted. len ( ) ;
82
+ for i in ( 0 ..( ( input_len/2 ) ) ) . rev ( ) {
83
+ sorted = heapify ( sorted, input_len, i) ;
84
+ }
85
+ for i in ( 1 ..( input_len) ) . rev ( ) {
86
+ let temp = sorted[ 0 ] ;
87
+ sorted[ 0 ] = sorted[ i] ;
88
+ sorted[ i] = temp;
89
+ sorted = heapify ( sorted, i, 0 ) ;
90
+ }
91
+ return sorted;
92
+ }
93
+
94
+ fn heapify ( input : Vec < i32 > , len : usize , i : usize ) -> Vec < i32 > {
95
+ let mut heap: Vec < i32 > = input;
96
+ let mut largest: usize = i;
97
+ let left_index: usize = 2 * i + 1 ;
98
+ let right_index: usize = 2 * i + 2 ;
99
+ if left_index < len && heap[ left_index] > heap[ largest] {
100
+ largest = left_index;
101
+ }
102
+ if right_index < len && heap[ right_index] > heap[ largest] {
103
+ largest = right_index;
104
+ }
105
+ if largest != i {
106
+ let temp: i32 = heap[ i] ;
107
+ heap[ i] = heap[ largest] ;
108
+ heap[ largest] = temp;
109
+ return heapify ( heap, len, largest) ;
110
+ }
111
+ return heap;
112
+ }
113
+
74
114
/*
75
115
76
116
UTILITY FUNCTIONS
@@ -91,6 +131,8 @@ fn is_sorted(input: Vec<i32>) -> bool {
91
131
92
132
#[ cfg( test) ]
93
133
mod tests {
134
+ use crate :: sorting:: heap_sort;
135
+
94
136
use super :: insertion_sort;
95
137
use super :: merge_sort;
96
138
use super :: is_sorted;
@@ -117,7 +159,14 @@ mod tests {
117
159
fn test_merge_sort ( ) {
118
160
for i in 0 ..INPUTS . len ( ) {
119
161
let sorted: Vec < i32 > = merge_sort ( INPUTS [ i] . to_vec ( ) , 0 , INPUTS [ i] . len ( ) - 1 ) ;
120
- println ! ( "{sorted:?}" ) ;
162
+ assert_eq ! ( is_sorted( sorted) , true ) ;
163
+ }
164
+ }
165
+
166
+ #[ test]
167
+ fn test_heap_sort ( ) {
168
+ for i in 0 ..INPUTS . len ( ) {
169
+ let sorted: Vec < i32 > = heap_sort ( INPUTS [ i] . to_vec ( ) ) ;
121
170
assert_eq ! ( is_sorted( sorted) , true ) ;
122
171
}
123
172
}
0 commit comments