program ZigZagPattern;
// This program rearranges an array into a zig-zag pattern, where the elements
// alternate between being smaller and larger than their neighbors
// a < b > c < d > e < f > g...
// 3 < 5 > 1 < 9 > 6 < 7 > 2 < 4
procedure Swap(var A, B: Integer);
var
Temp: Integer;
begin
Temp := A;
A := B;
B := Temp;
end;
procedure RearrangeArrayIntoZigZagPattern(var Arr: array of Integer);
var
I: Integer;
Small: Boolean;
begin
Small := True;
for I := 0 to High(Arr) - 1 do
begin
if Small then
begin
{ Expect Arr[I] < Arr[I + 1] }
if Arr[I] > Arr[I + 1] then
Swap(Arr[I], Arr[I + 1]);
end
else
begin
{ Expect Arr[I] > Arr[I + 1] }
if Arr[I] < Arr[I + 1] then
Swap(Arr[I], Arr[I + 1]);
end;
Small := not Small;
end;
end;
var
Arr: array[0..7] of Integer = (3, 5, 1, 7, 9, 6, 4, 2);
I: Integer;
begin
RearrangeArrayIntoZigZagPattern(Arr);
for I := 0 to High(Arr) do
Write(Arr[I], ' ');
Writeln;
end.
{
run:
3 5 1 9 6 7 2 4
}