@@ -95,8 +95,7 @@ fn quick_sort<T: copy>(compare_func: le<T>, arr: ~[mut T]) {
95
95
qsort :: < T > ( compare_func, arr, 0 u, len :: < T > ( arr) - 1 u) ;
96
96
}
97
97
98
- fn qsort3 < T : copy > ( compare_func_lt : le < T > , compare_func_eq : le < T > ,
99
- arr : ~[ mut T ] , left : int , right : int ) {
98
+ fn qsort3 < T : copy Ord Eq > ( arr : ~[ mut T ] , left : int , right : int ) {
100
99
if right <= left { return ; }
101
100
let v: T = arr[ right] ;
102
101
let mut i: int = left - 1 ;
@@ -105,19 +104,19 @@ fn qsort3<T: copy>(compare_func_lt: le<T>, compare_func_eq: le<T>,
105
104
let mut q: int = j;
106
105
loop {
107
106
i += 1 ;
108
- while compare_func_lt ( & arr[ i] , & v ) { i += 1 ; }
107
+ while arr[ i] < v { i += 1 ; }
109
108
j -= 1 ;
110
- while compare_func_lt ( & v , & arr[ j] ) {
109
+ while v < arr[ j] {
111
110
if j == left { break ; }
112
111
j -= 1 ;
113
112
}
114
113
if i >= j { break ; }
115
114
arr[ i] <-> arr[ j] ;
116
- if compare_func_eq ( & arr[ i] , & v ) {
115
+ if arr[ i] == v {
117
116
p += 1 ;
118
117
arr[ p] <-> arr[ i] ;
119
118
}
120
- if compare_func_eq ( & v , & arr[ j] ) {
119
+ if v == arr[ j] {
121
120
q -= 1 ;
122
121
arr[ j] <-> arr[ q] ;
123
122
}
@@ -139,8 +138,8 @@ fn qsort3<T: copy>(compare_func_lt: le<T>, compare_func_eq: le<T>,
139
138
i += 1 ;
140
139
if k == 0 { break ; }
141
140
}
142
- qsort3 :: < T > ( compare_func_lt , compare_func_eq , arr, left, j) ;
143
- qsort3 :: < T > ( compare_func_lt , compare_func_eq , arr, i, right) ;
141
+ qsort3 :: < T > ( arr, left, j) ;
142
+ qsort3 :: < T > ( arr, i, right) ;
144
143
}
145
144
146
145
/**
@@ -155,7 +154,7 @@ fn qsort3<T: copy>(compare_func_lt: le<T>, compare_func_eq: le<T>,
155
154
*/
156
155
fn quick_sort3 < T : copy Ord Eq > ( arr : ~[ mut T ] ) {
157
156
if arr. len ( ) <= 1 { return ; }
158
- qsort3 ( core :: cmp :: lt , core :: cmp :: eq , arr, 0 , ( arr. len ( ) - 1 ) as int ) ;
157
+ qsort3 ( arr, 0 , ( arr. len ( ) - 1 ) as int ) ;
159
158
}
160
159
161
160
#[ cfg( test) ]
0 commit comments