File tree Expand file tree Collapse file tree 2 files changed +11
-2
lines changed Expand file tree Collapse file tree 2 files changed +11
-2
lines changed Original file line number Diff line number Diff line change @@ -20,7 +20,7 @@ Merge sort. Returns a new vector containing the sorted list.
20
20
Has worst case O(n log n) performance, best case O(n), but
21
21
is not space efficient. This is a stable sort.
22
22
*/
23
- fn merge_sort < T > ( le : lteq < T > , v : [ T ] ) -> [ T ] {
23
+ fn merge_sort < T > ( le : lteq < T > , v : [ mutable? T ] ) -> [ T ] {
24
24
fn merge < T > ( le : lteq < T > , a : [ T ] , b : [ T ] ) -> [ T ] {
25
25
let rs: [ T ] = [ ] ;
26
26
let a_len: uint = len :: < T > ( a) ;
@@ -38,7 +38,8 @@ fn merge_sort<T>(le: lteq<T>, v: [T]) -> [T] {
38
38
ret rs;
39
39
}
40
40
let v_len: uint = len :: < T > ( v) ;
41
- if v_len <= 1 u { ret v; }
41
+ if v_len == 0 u { ret [ ] ; }
42
+ if v_len == 1 u { ret [ v[ 0 ] ] ; }
42
43
let mid: uint = v_len / 2 u;
43
44
let a: [ T ] = slice :: < T > ( v, 0 u, mid) ;
44
45
let b: [ T ] = slice :: < T > ( v, mid, v_len) ;
Original file line number Diff line number Diff line change @@ -26,3 +26,11 @@ fn test() {
26
26
check_sort ( v1, v2) ;
27
27
}
28
28
}
29
+
30
+ #[ test]
31
+ fn test_merge_sort_mutable ( ) {
32
+ fn lteq ( & & a: int , & & b: int ) -> bool { ret a <= b; }
33
+ let v1 = [ mutable 3 , 2 , 1 ] ;
34
+ let v2 = std:: sort:: merge_sort ( lteq, v1) ;
35
+ assert v2 == [ 1 , 2 , 3 ] ;
36
+ }
You can’t perform that action at this time.
0 commit comments