shellsort(field A, int l, int r) {
shellsort(A, l, r, 0);
}
shellsort(field A, int l, int r, int k) {
if (h[k] <= r-l) then {
shellsort(A, l, r, k+1);
shell(A, l, r, h[k]-1, h[k]);
}
}
shell(field A, int l, int r, int i, int step) {
if (i >= 0) then {
do parallel {
shell(A, l, r, i-1, step);
} and {
insertsort(A, l, r-i, step);
}
}
}
insertsort(field A, int l, int r, int step) {
if (l <= r-step) then {
insertsort(A, l, r-step, step);
insert(A, l, r, step);
}
}
insert(field A, int l, int r, int step) {
if ((l <= r-step) and (A[r-step] > A[r])) then {
exchange(A[r-step], A[r]);
insert(A, l, r-step, step);
}
}
|