program Sort_Include1;
var A:array[1..100] of integer;
N,i,k,x : integer;
begin
write('жиым элементтерінің саны');
read(N);
read(A[1]); {for i:=1 to n do read(A[i]);}
{k – жиымның реттелген бөлігіндегі элементтер саны}
for k:=1 to n-1 do
begin
read(x); {x:=A[k+1];}
i:=k;
while (i>0)and(A[i]>x) do
begin
A[i+1]:=A[i];
i:=i-1;
end;
A[i+1]:=x;
end;
for i:=1 to n do write(A[i],' '); {реттелген жиым}
end.
Мысал: N бүтін сандардан тұратын А жиымының элементтерін өсу реті бойынша екілік іздеумен қосып сұрыптау.
program Sort_Include2;
var A:array[1..100] of integer;
N,i,k,x,c,left,right : integer;
begin
write('жиым элементтерінің саны'); read(N);
read(A[1]); {for i:=1 to n do read(A[i]);}
{k - жиымның реттелген бөлігіндегі элементтер саны }
for k:=1 to n-1 do
begin
read(x); {x:=A[k+1];}
left:=1; right:=k;
{іздеу фрагментінің оң және сол жақ шекарасы}
while leftdo
{соңғы айналымның екілік іздеуі}
begin
c:=(left+right+1) div 2;
{үлкен жаққа қарай дөңгелектеу ортасы}
if x>=A[c] then left:=c
{бірінші жартыны ортасымен аламыз}
else right:=c-1; {сол жақ жартысы ортасынсыз аламыз}
end;
if x>=A[left] then left:=left+1;
{х-ті енгізу үшін жиымды сдвигаем на 1 орынға оңға жылжытамыз}
for i:=k downto left do A[i+1]:=A[i];
A[left]:=x;
end;
for i:=1 to n do write(A[i],' '); {реттелген жиым}
end.
Алмастырып сұрыптау ("көпіршік" тәсілі)
Сұрыптаудың бұл тәсілінде жиымның көршілес элементтері бір-бірімен салыстырылады. Егер олар қажет ретпен орналаспаған болса, онда олардың орындарын алмастырамыз. Осы тәсілмен барлық элементтерді бір рет салыстырып шыққаннан кейін ең үлкен ең соңғы N-ші орында болады (бірінші "көпіршік" шықты). Циклдың келесі айналымы біріншіден N-1 элементке дейін орындалады және т.с.с. Барлығы N-1 салыстырылым қажет. Алмастыру арқылы сұрыптау тәсілінің есептелу күрделілігі O(N*N).
Мысал: 4,9,7,6,2,3 тізбегі берілген. Тізбекті өсу реті бойынша сұрыптау керек.
Мысал: N бүтін сандардан тұратын А жиымын өсу реті бойынша алмастырып сұрыптау. (Базалық нұсқа)
Достарыңызбен бөлісу: |