Помощь - Поиск - Пользователи - Календарь
Полная версия: Быстрая сортировка
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
mumu
Помогите. пожалуйса решить следующую задачу:
Дан неотсортированный массив из определённого количества слов. Нужно отсортировать их по окончаниям быстрой сортировкой (т.е. не по превым. а по последним буквам). Отсортированные слова помещаются в новый массив.
Как это решить?
Altair
Очень просто.
Используем быструю сортировку, только заменяем там все на сравнение букв (char), и начинаем не сначала строки а с конца. т.е. с элемента s[length(s)]; (последний).
fms
только наверно просто s[length(s)] не пройдет.. т.к. будет смотреть с последнего слова, а не с последн. буквы слова. (а может и нет.)

если массив объявить как двумерн. а при вводе использовать как одномерный т.е. если массив s[i,j] то вводим запоминаем в s[i] и тогда потом при выводе s[i,j] будет выводится j-ый символ i-ого слова.

__
действует в си.. на паскале не знаю.. smile.gif наверняка что то есть..
mumu
А как полностью реализовать на Паскале. Мне для универа. Ни фига не понимаю...
fms
http://algolist.manual.ru/sort/quick_sort.php

здесь есть объяснение и программа.. правда на си.. smile.gif в общем можно поковыряться..)
Altair
Код

Program SortQuckString;
Uses
Crt;
Const
nn=10;  {¬ Єб. Є®«-ў® н«-в®ў ў ¬ ббЁўҐ}
Type
atype=array[1..nn] of string;    {вЁЇ ¬ ббЁў}

Procedure Vec(var a:atype; var n:integer); {ўў®¤ ¬ ббЁў }
var c,i:integer;
begin
repeat
 writeln('‚ўҐ¤ЁвҐ n= '); readln(n)
until (n>0) and (n<=nn);
For i:=1 to n do
begin
 write('‚ўҐ¤ЁвҐ a[',i,']= ');
 readln(a[i])
end
End;


Procedure SortQuick(var x:atype; left, right:integer);   {б®авЁа®ўЄ }
var
l,r,i:integer;
a:string;
Begin
{ ЇҐаҐўҐа­Ґ¬ ўбҐ бва®ЄЁ }
l:=left; r:=right; a:=x[l];
repeat
 while (x[r]>=a) and (l<r) do r:=r-1;
 x[l]:=x[r];
 while (x[l]<=a) and (l<r) do l:=l+1;
 x[r]:=x[l];
until r=l;
x[l]:=a;
If left<l-1 then SortQuick(x,left,l-1);
If r+1<right then SortQuick(x,r+1,right)
end;

Procedure Print(a:atype; n:integer);
Var
I:integer;
Begin
For i:=1 to n do writeln(a[i]:6);
writeln
End;

Procedure PEREVOROT(var a:atype; n:integer);
var
i,k:integer;
s,ts:string;
begin
for i:=1 to n do
begin
 s:='';
 s:=a[i];
 for k:=1 to Ord(s[0]) do
 begin
  ts:='';
  ts[k]:=s[(ORD(s[0])-k+1)]
 end;
 for k:=1 to Ord(s[0]) do ts:=ts+ts[k];
 a[i]:=ts;
 ts:='';
end;
end;





Var
A:Atype;
n:integer;

Begin
Clrscr;
vec(a,n);
Writeln('‚ и ¬ ббЁў:');
Print(a,n);
{ЇҐаҐў®а зЁў Ґ¬ бва®ЄЁ ў ¬ ббЁўҐ}
PEREVOROT(a,n);
SortQuick(a,1,n);
PEREVOROT(a,n);
writeln('‚ и ®вб®авЁа®ў ­­л© ¬ ббЁў (­ зЁ­ п б Є®­Ґз­ле ЎгЄў)');
Print(a,n);
readkey
End.


Цитата
А как полностью реализовать на Паскале. Мне для универа. Ни фига не понимаю...

А как учиться дальше собираетесь?
Цитата
здесь есть объяснение и программа.. правда на си..  в общем можно поковыряться..)

Если товарищ не может на пасе, то с СИ он точно не разберется!
fms
мдя.. smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.