Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Метод сортировки естественным слиянием [Delphi]

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Метод сортировки естественным слиянием [Delphi]
Имя
Сообщение << Старые топики   Новые топики >>
Метод сортировки естественным слиянием [Delphi] - 2010-06-24 23:14:32.576666   
AnDrOiD73

Сообщений: 3
Оценки: 0
Присоединился: 2010-06-21 21:59:19.460000
есть структура записи, процедура для сортировки естественным слиянием, которая немного не так работает, а именно вообще пропадают некоторые записи - помогите ее подправить.

type
db_bibl=record
   avtor: string;
   name: string;
   izdat: string;
   god: string;
   end;

var
bibl: array [1..100] of db_bibl;

//процедура для сортировки естественным слиянием
procedure MergeSort_avtor(n: integer); //n - это текущее кол-во записей в массиве bibl
{Процедура сортировки слиянием}
var
i, j, k, t, s, Start1, Fin1, Fin2: integer;
B: array [1..100] of string;
begin
k := 1; {Начальное значение длины участков}
while k < n do begin {пока участок не весь массив}
t := 0; {начало 1-й пары участков}
while t+k < n do begin {пока не все участки просмотрели}
{Определяем границы рассматриваемых участков}
Start1 := t+1; Fin1 := t+k; {Начало и конец 1-го участка}
if t+2*k > n then Fin2 := n
else Fin2 := t+2*k; {Конец 2-го участка}
i := Start1; {Начальное значение индекса в 1-м участке}
j := Fin1 + 1; {Начальное значение индекса в 2-м участке}
s := 1; {Начальное значение индекса в массиве B}
{Заполняем B элементами из двух участков}
while (i <= Fin1) and (j <= Fin2) do begin
{Сравниваем попарно элементы из двух участков}
if bibl.avtor &lt; bibl[j].avtor then begin
{Вставляем элемент из 1-го участка}
B := bibl.avtor;
i := i + 1;
end else begin
{Вставляем элемент из 2-го участка}
B := bibl[j].avtor;
j := j + 1;
end;
s := s + 1;
end;
{Добавляем в массив B оставшиеся элементы из 1-го участка}
while (i &lt;= Fin1) do begin
B := bibl.avtor;
i := i + 1; s := s + 1;
end;
{Добавляем в массив B оставшиеся элементы из 2-го участка}
while (j &lt;= Fin2) do begin
B := bibl.avtor;
j := j + 1; s := s + 1;
end;
t := Fin2; {Переходим к следующей паре участков}
end;
k := k * 2; {Удваиваем значение длины участков}
{Сохраняем полученный промежуточный результат}
for s := 1 to t do bibl.avtor := B;
end;
end;

Изначально данные выглядят так: http://s47.radikal.ru/i117/1006/b0/75339e18edcc.jpg а после сортировки некоторые становятся просто пустыми http://i057.radikal.ru/1006/f8/1ba2a6f9ceb5.jpg
становятся они пустыми в последней строчки процедуры "for s := 1 to t do bibl.avtor := B;" с индексами похоже что то не так… помогите подправить…
Весь проект тут http://ifolder.ru/18295616 сортировка находится на 3-ей форме.
Post #: 1
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Метод сортировки естественным слиянием [Delphi]







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.