for i := 1 to n do
begin
x[i] := random(201) - 101; write(x[i], ' ')
end;
writeln
end;
{----------------------------------------------------------------------------------------}
Procedure fast(q, p : integer; var x : t);
var
s, l, r : integer;
begin
l := q; r := p; s := x[l];
repeat
while (x[r] >= s) and (l < r) do r := r - 1;
x[l] := x[r];
while (x[l] <= s) and (l < r) do l := l + 1;
x[r] := x[l]
until l = r;
x[l] := s;
if q < l - 1 then fast(q, l - 1, x);
if l + 1 < p then fast(l + 1, p, x)
end;
{--------------------------------------------------------------------------------}
begin
create(n, x); fast(1, n, x);
writeln('Tartiblangan butun sonli massiv');
for i := 1 to n do write(x[i], ' ');
writeln
end.
221-misol. Massivda nolga teng elementlar bor. Massivni o’sish bo’yicha tartiblovchi, so’ngra nolga teng elementlarni tashlab yuborish orqali massivni “ixchamlovchi” dasturni tuzing. Nollar bilan massivning oxirgi o’rinlari to’ldiriladi.
Massivni tartiblash bizga oldingi misollardan ma’lum bo’lgan jarayon - uni tezkor tartiblash prosedurasi yordamida amalgam oshirsa bo’ladi.
Bundan keyin, nolga teng elementlar massiv boshida bo’lib qoladi, masalan quyidagidek:
0 0 0 0 2 4 6 9 10 12
1 2 3 4 5 6 7 8 9 10
Endi nolga teng elementlarni massivning oxiriga ko’chirish kerak, bu esa oxir-oqibat quyidagi ko’rinishga kelib qoladi:
2 4 6 9 10 12 0 0 0 0
Nolga teng elementlarni massiv oxiriga kochirishning bir necha usullari mavjud.
Birinchi usul - bu nolga teng elementlarning sonini aniqlash, so’ngra qolgan elementlarni ularning joylashishiga ko’ra 1 dan boshlab nomerlab chiqish, qolgan elementlarga esa nol qiymat berib qo’yish kerak.
Ikkinchi usul – bu nolga teng elementlarni ketma-ket massiv oxiriga o’tkazish: birinchi nolga teng element olinib, massiv oxiriga o’tkaziladi, u n-chi, quyidagi misolda 10 elementning o’rnida bo’lib qoladi va
0 0 0 2 4 6 9 10 12 0
massiv hosil bo’ladi. Bu yerda birinchi o’rinda yana nolga teng element bo’lib qoladi, u endi oxirgi o’ringa emas, oxirgidan bitta oldingi o’ringa ko’chiriladi:
0 0 2 4 6 9 10 12 0 0 va h.k.
Biz ikkinchi usuldan foydalanamiz, zero biz elementlarning o’rnini almashtirish usulini bir necha marta qo’llaganmiz. Lekin hozir elementlarning o’rnini almashtirish uchun rekursiv prosedura tuzamiz. (Albatta prosedurasiz ham ishni amalga oshirsa bo’ladi, lekin bizning massivli rekursiv proseduralardan foydalanishni o’rganishimiz muhim ahamiyatga ega).
Do'stlaringiz bilan baham: |