Другие языки программирования и технологии

Паскаль: пузырьковый метод(сортировка).

Помогите мне разобрать "пузырьковый метод". Я его весь по полочкам разложил, да вот вечно что то не ясное возникает. Смотрел в поисковике, так так только общее понятие дается. У меня такое ощущение что я чего то не допонимаю.. мне допустим надо разложить по не убыванию(возрастанию) 15,14,13,12,11. {Сортируем по возрастанию } uses Crt; var n, h, i, k, j, P:integer; A: array[1..30] of integer; Begin for i:=1 to 5 do begin write( ' a[ ',i,' ]:' ); a[1]:=15; a[2]:=14; a[3]:=13; a[4]:=12; a[5]:=11; writeln(a); end; readln; Begin for k:=1 to 5-1 do for j:=k+1 to 5 do if A[k] > A[j] then begin P:= A[k]; A[k]:= A[j]; A[j]:= P; end; writeln('Масив, отсортированный по возрастанию:'); for k:=1 to 5 do writeln(' A[ ',k,' ]: ',A[k],' '); writeln; end; end. Все просто и ясно, но блин у меня вечно какието сомнения в правильности того как я все понял, хочется раз и навсегда понять что бы потом не возвращатся к этому попросу. Мне имменно не понятно, в связи с чем допустим когда пошла вторая К:=2 после К:=1 for k:=2 to 5-1 do for j:=k+1 to 5 do начинаются опять с начала, тоесть с 15.. .И p:=a[k]; a[k]:=a[j]; "a[j]:= p"; в первом круге ведь а[j] присваевается :=P т.е. 15-ть. Ну вот такая катовасия. Короче, я что то не допонимаю.. может кто не поленится разложить.. А?
выборка происходит не катого и джитого элементов, а J и J+1, сравниваются два соседних.
ЕП
Ефим Перец
13 767
Лучший ответ
for i:=1 to n-1 do for j:=1 to n-1 do if a[j]=1 then begin t:=a[j];a[j]:=a[j+1];a[j+1]:=t end;
Вот и всё. b-1 проходов по массиву, и пузырьки гарантированно всплыли. Можно еще слегка сэкономить:
for i:=1 to n-1 do for j:=1 to i-1 do if a[j]>a[j+1] then begin t:=a[j];a[j]:=a[j+1];a[j+1]:=t end;
V(
Vel (Lor,ik) .
32 266
пузырьковая сортировка содержит в себе 2 цикла - по i и по j. Цикл по i берет первый элемент и сравнивает его в цикле по j со всеми остальными элементами массива (при необходимости меняя элементы местами) , после чего j заканчивается, и цикл по i берет второй элемент массива и т. д. до последнего.
Айбек Хосаев
Айбек Хосаев
3 769
Шейкерная сортировка (улучшенный вариант метода пузырька)

program ShakerSort;
const lim = 50;
type T = Integer;
Vector = array[1..lim] of T;
Var i, N, L, R, p : Byte;
tmp: T;
flag: Boolean;
a: Vector;
Begin
Readln(N);
For i:=1 to N do Begin
Readln(a);
End;
L:=N; R:=N;
Repeat
flag:=false;
For i:=L to R-1 do Begin
If a › a[i+1] then Begin
tmp:=a; a:=a[i+1]; a[i+1]:=tmp;
p:=i;
flag:=true;
End;
End;
R:=p;
For i:=R-1 downto L do Begin
If a › a[i+1] then Begin
tmp:=a; a:=a[i+1]; a[i+1]:=tmp;
p:=i;
flag:=true;
End;
End;
L:=p;
until flag;
Write('Результат сортировки: ');
For i=1 to n do
Write(a,' ')
End.

можете посмотреть и сортировку Шелла она более интересная))
Anarbek Pernaliev
Anarbek Pernaliev
1 395