@@ -20,12 +20,12 @@ type Le<T> = pure fn(v1: &T, v2: &T) -> bool;
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 : Copy > ( le : Le < T > , v : & [ const T ] ) -> ~[ T ] {
23
+ fn merge_sort < T : Copy > ( v : & [ const T ] , le : Le < T > ) -> ~[ T ] {
24
24
type Slice = ( uint , uint ) ;
25
25
26
- return merge_sort_ ( le , v, ( 0 u, len ( v) ) ) ;
26
+ return merge_sort_ ( v, ( 0 u, len ( v) ) , le ) ;
27
27
28
- fn merge_sort_ < T : Copy > ( le : Le < T > , v : & [ const T ] , slice : Slice )
28
+ fn merge_sort_ < T : Copy > ( v : & [ const T ] , slice : Slice , le : Le < T > )
29
29
-> ~[ T ] {
30
30
let begin = slice. first ( ) ;
31
31
let end = slice. second ( ) ;
@@ -37,7 +37,7 @@ fn merge_sort<T: Copy>(le: Le<T>, v: &[const T]) -> ~[T] {
37
37
let mid = v_len / 2 u + begin;
38
38
let a = ( begin, mid) ;
39
39
let b = ( mid, end) ;
40
- return merge ( le, merge_sort_ ( le , v, a) , merge_sort_ ( le , v, b) ) ;
40
+ return merge ( le, merge_sort_ ( v, a, le ) , merge_sort_ ( v, b, le ) ) ;
41
41
}
42
42
43
43
fn merge < T : Copy > ( le : Le < T > , a : & [ T ] , b : & [ T ] ) -> ~[ T ] {
@@ -58,8 +58,8 @@ fn merge_sort<T: Copy>(le: Le<T>, v: &[const T]) -> ~[T] {
58
58
}
59
59
}
60
60
61
- fn part < T : Copy > ( compare_func : Le < T > , arr : & [ mut T ] , left : uint ,
62
- right : uint , pivot : uint ) -> uint {
61
+ fn part < T : Copy > ( arr : & [ mut T ] , left : uint ,
62
+ right : uint , pivot : uint , compare_func : Le < T > ) -> uint {
63
63
let pivot_value = arr[ pivot] ;
64
64
arr[ pivot] <-> arr[ right] ;
65
65
let mut storage_index: uint = left;
@@ -75,16 +75,16 @@ fn part<T: Copy>(compare_func: Le<T>, arr: &[mut T], left: uint,
75
75
return storage_index;
76
76
}
77
77
78
- fn qsort < T : Copy > ( compare_func : Le < T > , arr : & [ mut T ] , left : uint ,
79
- right : uint ) {
78
+ fn qsort < T : Copy > ( arr : & [ mut T ] , left : uint ,
79
+ right : uint , compare_func : Le < T > ) {
80
80
if right > left {
81
81
let pivot = ( left + right) / 2 u;
82
- let new_pivot = part :: < T > ( compare_func , arr, left, right, pivot) ;
82
+ let new_pivot = part :: < T > ( arr, left, right, pivot, compare_func ) ;
83
83
if new_pivot != 0 u {
84
84
// Need to do this check before recursing due to overflow
85
- qsort :: < T > ( compare_func , arr, left, new_pivot - 1 u) ;
85
+ qsort :: < T > ( arr, left, new_pivot - 1 u, compare_func ) ;
86
86
}
87
- qsort :: < T > ( compare_func , arr, new_pivot + 1 u, right) ;
87
+ qsort :: < T > ( arr, new_pivot + 1 u, right, compare_func ) ;
88
88
}
89
89
}
90
90
@@ -94,9 +94,9 @@ fn qsort<T: Copy>(compare_func: Le<T>, arr: &[mut T], left: uint,
94
94
* Has worst case O(n^2) performance, average case O(n log n).
95
95
* This is an unstable sort.
96
96
*/
97
- fn quick_sort < T : Copy > ( compare_func : Le < T > , arr : & [ mut T ] ) {
97
+ fn quick_sort < T : Copy > ( arr : & [ mut T ] , compare_func : Le < T > ) {
98
98
if len :: < T > ( arr) == 0 u { return ; }
99
- qsort :: < T > ( compare_func , arr, 0 u, len :: < T > ( arr) - 1 u) ;
99
+ qsort :: < T > ( arr, 0 u, len :: < T > ( arr) - 1 u, compare_func ) ;
100
100
}
101
101
102
102
fn qsort3 < T : Copy Ord Eq > ( arr : & [ mut T ] , left : int , right : int ) {
@@ -292,7 +292,8 @@ fn countRunAndMakeAscending<T: Ord>(array: &[mut T]) -> uint {
292
292
return run;
293
293
}
294
294
295
- pure fn gallopLeft < T : Ord > ( key : & const T , array : & [ const T ] , hint : uint ) -> uint {
295
+ pure fn gallopLeft < T : Ord > ( key : & const T , array : & [ const T ] ,
296
+ hint : uint ) -> uint {
296
297
let size = array. len ( ) ;
297
298
assert size != 0 && hint < size;
298
299
@@ -340,7 +341,8 @@ pure fn gallopLeft<T: Ord>(key: &const T, array: &[const T], hint: uint) -> uint
340
341
return ofs;
341
342
}
342
343
343
- pure fn gallopRight < T : Ord > ( key : & const T , array : & [ const T ] , hint : uint ) -> uint {
344
+ pure fn gallopRight < T : Ord > ( key : & const T , array : & [ const T ] ,
345
+ hint : uint ) -> uint {
344
346
let size = array. len ( ) ;
345
347
assert size != 0 && hint < size;
346
348
@@ -464,7 +466,8 @@ impl<T: Ord> &MergeState<T> {
464
466
self. runs . pop ( ) ;
465
467
}
466
468
467
- fn mergeLo ( array : & [ mut T ] , base1 : uint , len1 : uint , base2 : uint , len2 : uint ) {
469
+ fn mergeLo ( array : & [ mut T ] , base1 : uint , len1 : uint ,
470
+ base2 : uint , len2 : uint ) {
468
471
assert len1 != 0 && len2 != 0 && base1+len1 == base2;
469
472
470
473
vec:: reserve ( & mut self . tmp , len1) ;
@@ -558,7 +561,9 @@ impl<T: Ord> &MergeState<T> {
558
561
dest += 1 ; c1 += 1 ; len1 -= 1 ;
559
562
if len1 == 1 { breakOuter = true ; break ; }
560
563
minGallop -= 1 ;
561
- if !( count1 >= MIN_GALLOP || count2 >= MIN_GALLOP ) { break ; }
564
+ if !( count1 >= MIN_GALLOP || count2 >= MIN_GALLOP ) {
565
+ break ;
566
+ }
562
567
}
563
568
if breakOuter { break ; }
564
569
if minGallop < 0 { minGallop = 0 ; }
@@ -584,7 +589,8 @@ impl<T: Ord> &MergeState<T> {
584
589
unsafe { vec:: raw:: set_len ( self . tmp , 0 ) ; }
585
590
}
586
591
587
- fn mergeHi ( array : & [ mut T ] , base1 : uint , len1 : uint , base2 : uint , len2 : uint ) {
592
+ fn mergeHi ( array : & [ mut T ] , base1 : uint , len1 : uint ,
593
+ base2 : uint , len2 : uint ) {
588
594
assert len1 != 1 && len2 != 0 && base1 + len1 == base2;
589
595
590
596
vec:: reserve ( & mut self . tmp , len2) ;
@@ -655,7 +661,8 @@ impl<T: Ord> &MergeState<T> {
655
661
assert len2 > 1 && len1 != 0 ;
656
662
657
663
let tmpView = vec:: mut_view ( array, base1, base1+len1) ;
658
- count1 = len1-gallopRight ( & const self . tmp [ c2] , tmpView, len1-1 ) ;
664
+ count1 = len1 - gallopRight (
665
+ & const self . tmp [ c2] , tmpView, len1-1 ) ;
659
666
660
667
if count1 != 0 {
661
668
dest -= count1; c1 -= count1; len1 -= count1;
@@ -670,8 +677,8 @@ impl<T: Ord> &MergeState<T> {
670
677
if len2 == 1 { breakOuter = true ; break ; }
671
678
672
679
let tmpView = vec:: mut_view ( self . tmp , 0 , len2) ;
673
- let gL = gallopLeft ( & const array [ c1 ] , tmpView , len2- 1 ) ;
674
- count2 = len2 - gL ;
680
+ let count2 = len2 - gallopLeft (
681
+ & const array [ c1 ] , tmpView , len2- 1 ) ;
675
682
if count2 != 0 {
676
683
dest -= count2; c2 -= count2; len2 -= count2;
677
684
unsafe {
@@ -683,7 +690,9 @@ impl<T: Ord> &MergeState<T> {
683
690
dest -= 1 ; c1 -= 1 ; len1 -= 1 ;
684
691
if len1 == 0 { breakOuter = true ; break ; }
685
692
minGallop -= 1 ;
686
- if !( count1 >= MIN_GALLOP || count2 >= MIN_GALLOP ) { break ; }
693
+ if !( count1 >= MIN_GALLOP || count2 >= MIN_GALLOP ) {
694
+ break ;
695
+ }
687
696
}
688
697
689
698
if breakOuter { break ; }
@@ -748,7 +757,8 @@ impl<T: Ord> &MergeState<T> {
748
757
// Moves elements to from dest to from
749
758
// Unsafe as it makes the from parameter invalid between s2 and s2+len
750
759
#[ inline( always) ]
751
- unsafe fn moveVec < T > ( dest : & [ mut T ] , s1 : uint , from : & [ const T ] , s2 : uint , len : uint ) {
760
+ unsafe fn moveVec < T > ( dest : & [ mut T ] , s1 : uint ,
761
+ from : & [ const T ] , s2 : uint , len : uint ) {
752
762
assert s1+len <= dest. len ( ) && s2+len <= from. len ( ) ;
753
763
754
764
do vec:: as_mut_buf ( dest) |p, _len| {
0 commit comments