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 < 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 <= Fin1) do begin B := bibl.avtor; i := i + 1; s := s + 1; end; {Добавляем в массив B оставшиеся элементы из 2-го участка} while (j <= 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-ей форме.
|