от позиции ind} var


от позиции ind} var i: index1; begin for i:= N-1 downto ind do Mas[i] := Mas[i-1] end; {ShiftRightArray} procedure InsArray (var Mas: massive1; K: index1; Elem: item); var i: index1; begin ShiftRightArray (Mas, k); Mas[K] := Elem end; {InsArray} type index1 = 0..N-1; {N > 1} massive1 = array [index1] of item; function Partition (var Mas: massive1; left, right: index1): index1; var i, j: index1; barrier: item; begin barrier := Mas[(left + right) div 2]; i := left; j := right; repeat while (Mas[i] < barrier) do i := i+1; while (Mas[j] > barrier) do j := j-1; if i ? j then begin Swap{Mas[i], Mas[j]}; i := i+1; j:= j-1 end; until i > j; Partition := j end; Как видим, здесь на роль барьера выбрано значение элемента, располагающегося на середине входного подмассива. После завершения процедуры левый подмассив базируется на диапазоне индексов left..j, а правый, соответственно, на диапазоне j+1..right. Например, применив этот
Индекс
Элементарные функции    Линейные уравнения    Нелинейные уравнения    Случайные числа


Hosted by uCoz