1
1
#[ doc = "Sorting methods" ] ;
2
2
import vec:: len;
3
+ import int:: { eq, ord} ;
3
4
4
5
export le;
5
6
export merge_sort;
@@ -141,7 +142,6 @@ fn qsort3<T: copy>(compare_func_lt: le<T>, compare_func_eq: le<T>,
141
142
qsort3 :: < T > ( compare_func_lt, compare_func_eq, arr, i, right) ;
142
143
}
143
144
144
- // FIXME: This should take lt and eq types (#2348)
145
145
#[ doc = "
146
146
Fancy quicksort. Sorts a mut vector in place.
147
147
@@ -152,22 +152,17 @@ According to these slides this is the algorithm of choice for
152
152
153
153
This is an unstable sort.
154
154
" ]
155
- fn quick_sort3 < T : copy > ( compare_func_lt : le < T > , compare_func_eq : le < T > ,
156
- arr : [ mut T ] ) {
155
+ fn quick_sort3 < T : copy ord eq> ( arr : [ mut T ] ) {
157
156
if len :: < T > ( arr) == 0 u { ret; }
158
- qsort3 :: < T > ( compare_func_lt , compare_func_eq , arr, 0 ,
157
+ qsort3 :: < T > ( { |x , y| x . lt ( y ) } , { |x , y| x . eq ( y ) } , arr, 0 ,
159
158
( len :: < T > ( arr) as int ) - 1 ) ;
160
159
}
161
160
162
161
#[ cfg( test) ]
163
162
mod test_qsort3 {
164
163
fn check_sort ( v1 : [ mut int] , v2 : [ mut int] ) {
165
164
let len = vec:: len :: < int > ( v1) ;
166
- fn lt ( & & a: int , & & b: int ) -> bool { ret a < b; }
167
- fn equal ( & & a: int , & & b: int ) -> bool { ret a == b; }
168
- let f1 = lt;
169
- let f2 = equal;
170
- quick_sort3 :: < int > ( f1, f2, v1) ;
165
+ quick_sort3 :: < int > ( v1) ;
171
166
let mut i = 0 u;
172
167
while i < len {
173
168
log ( debug, v2[ i] ) ;
0 commit comments