Агар Mассивнинг бўлиниши натижасида бирон бир қисмда бир нечта element мавжуд бўлса, унда ушбу қисм рекурсив саралаши, яъни юқорида тавсифланган бўлиниш операцияси бажарилиши керак. "Елементлар сони > 1" шартини текшириш учун тахминан қуйидаги схема бўйича ҳаракат қилинади:
Mas[L..R] мавжуд, бу ерда L ва R массивнинг екстремал елементларининг индекслари. Бўлиниш охирида first ва last кўрсатгичлар тахминан кетма-кетликнинг ўртасида пайдо бўлди ва шу билан иккита сегментни ҳосил қилди: чапдан L дан last гача ва ўнгдан first дан га R. Гача. Агар L<last шарт бажарилса , чап қисмнинг рекурсив тартибини бажариш керакн. Ўнг қисм учун шарт ўхшаш: first
Ўзбекистон Республикаси ҳудудлари рўйхатини уларнинг ер майдонига кўра саралаш дастури
uses crt;
const n=13;
var x:array[1..n] of integer = (4200, 39400, 6800, 20500, 6300, 7900, 110300, 400, 160000, 16400, 5100, 20800, 15300);
y:array[1..n] of string = ('Andijon viloyati', 'Buxoro viloyati', 'Farg ona viloyati','Jizzax viloyati','Xorazm viloyati', 'Namjngan viloyati', 'Navoiy viloyati','Qashqadaryo viloyati', 'Qoraqalpog iston Rtspublikasi', 'Samarqand viloyati','Sirdaryo viloyati', 'Surxondaryo viloyati', 'Toshkеnt viloyati');
i:integer;
procedure sort(l,r:integer); {l массивнинг чап чегараси,r-ўнг чегара}
var
i,j,x1,y1,m: integer;
begin
i:=l;
j:=r;
m:=round ((l+r)/2);{марказий элемент}
x1:=x[m];
repeat
while x[i]do inc(i);{ чапдаги ўртадагидан бўлса чап чегарани ўнга силжитамиз }
while x[j]>x1 do dec(j);
if i<=j then {}
begin
y1:=x[i];
x[i]:=x[j];{чап ва ўнгдагиларни алмаштирамиз}
x[j]:=y1;
inc(i); {чапдаги ўнгга}
dec(j); {ўнгдаги чапга}
Do'stlaringiz bilan baham: |