Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
56
Добавлен:
10.05.2014
Размер:
1.71 Кб
Скачать
program shaker;
(*
(c) 2005 Dima Zolotukhin aka 'Zlogic' <zlogic@gmail.com>
Redistributable under GNU GPL license
*)

const
MAX_PATH = 100;
type
str_path = string[MAX_PATH];
str_message = string[70];

function get_string(m:str_message):str_path;
var
temp_str:str_path;
begin
write(m,'> ');
readln(temp_str);
get_string:=temp_str;
end;


procedure swap(var str:str_path;x,y:byte);
var
temp_str:str_path;
begin
temp_str:=copy(str,x,1);
delete(str,x,1);
if(y>x)then
y:=y-1;
insert(temp_str,str,y);
end;
function bubble_forward(var str:str_path):boolean;
var
i:byte;
begin
bubble_forward:=false;
for i:=1 to length(str)-1 do
begin
if(copy(str,i,1)>copy(str,i+1,1))then
begin
swap(str,i+1,i);
bubble_forward:=true;
end;
end;
end;
function bubble_backwards(var str:str_path):boolean;
var
i:byte;
begin
bubble_backwards:=false;
for i:=length(str) downto 2 do
begin
if(copy(str,i,1)<copy(str,i-1,1))then
begin
swap(str,i,i-1);
bubble_backwards:=true;
end;
end;
end;

procedure shaker_sort(var str:str_path);
var
found,sort_backwards:boolean;
begin
found:=true;
sort_backwards:=true;
while(found)do{Ї®Є  ­Ґ ­ ©¤Ґ­®}
begin
if(sort_backwards)then{б®авЁа㥬 вг¤ }
found:=bubble_backwards(str)
else{б®авЁа㥬 ®Ўа в­®}
found:=bubble_forward(str);
sort_backwards:=not sort_backwards;{¬Ґ­пҐ¬ ­ Їа ў«Ґ­ЁҐ}
end;
end;

var
str:str_path;
begin
str:=get_string('‚ўҐ¤ЁвҐ бва®Єг');{Ї®«гз Ґ¬ Ёб室­го бва®Єг}
shaker_sort(str);{б®авЁа㥬}
writeln('Ћвб®авЁа®ў ­­ п бва®Є : ',str);{ўлў®¤Ё¬}
readln;
end.
Соседние файлы в папке 08