diff options
| author | Graydon Hoare <[email protected]> | 2011-03-16 14:58:02 -0700 |
|---|---|---|
| committer | Graydon Hoare <[email protected]> | 2011-03-16 14:58:02 -0700 |
| commit | 54587bdccb7b6771cfc704a30fc0ef2c65824a15 (patch) | |
| tree | 6f154f9b038e9542b364e87ae887858a96bdb4a9 /src/lib/sort.rs | |
| parent | Add some more dlopen-related suppressions for the Mac (diff) | |
| download | rust-54587bdccb7b6771cfc704a30fc0ef2c65824a15.tar.xz rust-54587bdccb7b6771cfc704a30fc0ef2c65824a15.zip | |
Switch all vases of vec += elt to vec += vec. Prohibit former in rustboot. Tweak std lib vec fns in process.
Diffstat (limited to 'src/lib/sort.rs')
| -rw-r--r-- | src/lib/sort.rs | 56 |
1 files changed, 28 insertions, 28 deletions
diff --git a/src/lib/sort.rs b/src/lib/sort.rs index cff7efce..52839b1f 100644 --- a/src/lib/sort.rs +++ b/src/lib/sort.rs @@ -5,38 +5,38 @@ type lteq[T] = fn(&T a, &T b) -> bool; fn merge_sort[T](lteq[T] le, vec[T] v) -> vec[T] { - fn merge[T](lteq[T] le, vec[T] a, vec[T] b) -> vec[T] { - let vec[T] res = vec(); - let uint a_len = len[T](a); - let uint a_ix = 0u; - let uint b_len = len[T](b); - let uint b_ix = 0u; - while (a_ix < a_len && b_ix < b_len) { - if (le(a.(a_ix), b.(b_ix))) { - res += a.(a_ix); - a_ix += 1u; - } else { - res += b.(b_ix); - b_ix += 1u; - } + fn merge[T](lteq[T] le, vec[T] a, vec[T] b) -> vec[T] { + let vec[T] res = vec(); + let uint a_len = len[T](a); + let uint a_ix = 0u; + let uint b_len = len[T](b); + let uint b_ix = 0u; + while (a_ix < a_len && b_ix < b_len) { + if (le(a.(a_ix), b.(b_ix))) { + res += vec(a.(a_ix)); + a_ix += 1u; + } else { + res += vec(b.(b_ix)); + b_ix += 1u; + } + } + res += slice[T](a, a_ix, a_len); + res += slice[T](b, b_ix, b_len); + ret res; } - res += slice[T](a, a_ix, a_len); - res += slice[T](b, b_ix, b_len); - ret res; - } - let uint v_len = len[T](v); + let uint v_len = len[T](v); - if (v_len <= 1u) { - ret v; - } + if (v_len <= 1u) { + ret v; + } - let uint mid = v_len / 2u; - let vec[T] a = slice[T](v, 0u, mid); - let vec[T] b = slice[T](v, mid, v_len); - ret merge[T](le, - merge_sort[T](le, a), - merge_sort[T](le, b)); + let uint mid = v_len / 2u; + let vec[T] a = slice[T](v, 0u, mid); + let vec[T] b = slice[T](v, mid, v_len); + ret merge[T](le, + merge_sort[T](le, a), + merge_sort[T](le, b)); } // Local Variables: |