mirror of
https://github.com/rust-lang/rust.git
synced 2024-12-04 20:54:13 +00:00
stdlib: Make merge_sort take [mutable? T]
This commit is contained in:
parent
39b729e36f
commit
ad66d72e6c
@ -20,7 +20,7 @@ Merge sort. Returns a new vector containing the sorted list.
|
|||||||
Has worst case O(n log n) performance, best case O(n), but
|
Has worst case O(n log n) performance, best case O(n), but
|
||||||
is not space efficient. This is a stable sort.
|
is not space efficient. This is a stable sort.
|
||||||
*/
|
*/
|
||||||
fn merge_sort<T>(le: lteq<T>, v: [T]) -> [T] {
|
fn merge_sort<T>(le: lteq<T>, v: [mutable? T]) -> [T] {
|
||||||
fn merge<T>(le: lteq<T>, a: [T], b: [T]) -> [T] {
|
fn merge<T>(le: lteq<T>, a: [T], b: [T]) -> [T] {
|
||||||
let rs: [T] = [];
|
let rs: [T] = [];
|
||||||
let a_len: uint = len::<T>(a);
|
let a_len: uint = len::<T>(a);
|
||||||
@ -38,7 +38,8 @@ fn merge_sort<T>(le: lteq<T>, v: [T]) -> [T] {
|
|||||||
ret rs;
|
ret rs;
|
||||||
}
|
}
|
||||||
let v_len: uint = len::<T>(v);
|
let v_len: uint = len::<T>(v);
|
||||||
if v_len <= 1u { ret v; }
|
if v_len == 0u { ret []; }
|
||||||
|
if v_len == 1u { ret [v[0]]; }
|
||||||
let mid: uint = v_len / 2u;
|
let mid: uint = v_len / 2u;
|
||||||
let a: [T] = slice::<T>(v, 0u, mid);
|
let a: [T] = slice::<T>(v, 0u, mid);
|
||||||
let b: [T] = slice::<T>(v, mid, v_len);
|
let b: [T] = slice::<T>(v, mid, v_len);
|
||||||
|
@ -26,3 +26,11 @@ fn test() {
|
|||||||
check_sort(v1, v2);
|
check_sort(v1, v2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_merge_sort_mutable() {
|
||||||
|
fn lteq(&&a: int, &&b: int) -> bool { ret a <= b; }
|
||||||
|
let v1 = [mutable 3, 2, 1];
|
||||||
|
let v2 = std::sort::merge_sort(lteq, v1);
|
||||||
|
assert v2 == [1, 2, 3];
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user