Skip to content

Commit a09117a

Browse files
committed
---
yaml --- r: 6023 b: refs/heads/master c: ad66d72 h: refs/heads/master i: 6021: 39035f6 6019: 5973e65 6015: b70bc0b v: v3
1 parent bea4804 commit a09117a

File tree

3 files changed

+12
-3
lines changed

3 files changed

+12
-3
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 39b729e36f813a58de6b1f5641c94f47b7a6c277
2+
refs/heads/master: ad66d72e6c0f77d7c6a094cf3fc5799b65824c87

trunk/src/lib/sort.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ Merge sort. Returns a new vector containing the sorted list.
2020
Has worst case O(n log n) performance, best case O(n), but
2121
is not space efficient. This is a stable sort.
2222
*/
23-
fn merge_sort<T>(le: lteq<T>, v: [T]) -> [T] {
23+
fn merge_sort<T>(le: lteq<T>, v: [mutable? T]) -> [T] {
2424
fn merge<T>(le: lteq<T>, a: [T], b: [T]) -> [T] {
2525
let rs: [T] = [];
2626
let a_len: uint = len::<T>(a);
@@ -38,7 +38,8 @@ fn merge_sort<T>(le: lteq<T>, v: [T]) -> [T] {
3838
ret rs;
3939
}
4040
let v_len: uint = len::<T>(v);
41-
if v_len <= 1u { ret v; }
41+
if v_len == 0u { ret []; }
42+
if v_len == 1u { ret [v[0]]; }
4243
let mid: uint = v_len / 2u;
4344
let a: [T] = slice::<T>(v, 0u, mid);
4445
let b: [T] = slice::<T>(v, mid, v_len);

trunk/src/test/stdtest/sort.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,11 @@ fn test() {
2626
check_sort(v1, v2);
2727
}
2828
}
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+
}

0 commit comments

Comments
 (0)