Есть вот такой код на расте.
fn hsort(vec : &mut Vec<int>) -> () {
let size = vec.len();
struct Env {
vec : &Vec<int>,
start : uint,
size : uint
};
fn getMax(env : &Env, cur : uint, maxInd: uint){
if cur >= env.size {
return maxInd;
}
let sh = cur - env.start;
let maxInd = getMax(env, sh * 2 + 1 + env.start, maxInd);
let maxInd = getMax(env, sh * 2 + 2 + env.start, maxInd);
if env.vec[cur] <= env.vec[maxInd] {
return cur;
}
else {
return maxInd;
}
};
let mut env = Env {
vec : vec,
start : 0,
size : size
};
for i in range(0,size - 1){
env.start = i;
let ind = getMax(env,i,i);
let a = (*vec)[ind];
(*vec)[ind] = (*vec)[i];
(*vec)[i] = a;
}
}