Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2010, 23:04   #1
LeDиNkо
Пользователь
 
Аватар для LeDиNkо
 
Регистрация: 17.12.2009
Сообщений: 18
Вопрос Предсортировка и слияние -Delphi

Пишу программу предсортировки и слияния в Delphi. Метод заключается в том, что основной массив разбивается на два дочерних, в отношении каждого из которых осуществляется сортировка. Затем отсортированные массивы сливаются, и полученный массив подвергается вторичной сортировке. В результате получаем отсортированный массив.
Моя программа почему-то выдает неверный результат...сама ошибок обнаружить не могу. Буду признательна за помощь.
Код:
procedure TForm1.Button1Click(Sender: TObject);
type massiv=array[1..30] of integer;

procedure delete_el(m:integer; var c:massiv);
begin
  c[m]:=c[m+1];
end;

var stroka,s:string;
    a,b: massiv;
    i,t,j,q,num1,num2,num3,e,y,min1,min2,min3,x,k:integer;
begin
stroka:=Chisla.Text;
trim(stroka); k:=1; t:=0; i:=1;
while i<>Length(stroka)+1 do
  begin
  if stroka[i]=' ' then
      begin
      s:=copy(stroka,t+1,i-t-1);
      a[k]:=StrToInt(s);
      inc(k);
      t:=i; i:=i+1;
      end
  else i:=i+1;
  end;

e:=trunc(k/2);
while e<>0  do
  begin
  for j:=1 to e do
      begin
      min1:=a[j];
      for q:=1 to e do
      if min1>a[q] then
         begin
         min1:=a[q];
         num1:=q;
         end;
       end;
  b[j]:=min1;  inc(x);
  delete_el(num1,a); e:=e-1;
  end;

while e<>0  do
  begin
  for j:=e+1 to k do
      begin
      min2:=a[j];
      for q:=e+1 to k do
      if min2>a[q] then
         begin
         min2:=a[q];
         num2:=q;
         end;
      end;
  b[j]:=min2; inc(x);
  delete_el(num2,a); e:=e-1;
  end;
y:=1;
while y<>k  do
  begin
  for j:=1 to k do
      begin
      min3:=b[j];
      for q:=1 to k do
      if min3>b[q] then
         begin
         min3:=b[q];
         num3:=q;
         end;
      end;
  Sliyaniye.Text:=Sliyaniye.Text+' '+InttoStr(min3);
  delete_el(num3,b); y:=y+1; inc(x);
  end;
Iter1.Text:=IntToStr(x);

end;


end.

Последний раз редактировалось Stilet; 13.11.2010 в 23:16.
LeDиNkо вне форума Ответить с цитированием
Старый 13.11.2010, 23:23   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Метод заключается в том, что основной массив разбивается на два дочерних, в отношении каждого из которых осуществляется сортировка. Затем отсортированные массивы сливаются, и полученный массив подвергается вторичной сортировке. В результате получаем отсортированный массив.
Мдя...

Так сойдет?:
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var a:array[1..30] of integer;i:integer;

procedure Sort(from,too:integer);
var i,k,e:integer;
begin
 for i:=from to too do begin
  for k:=i to too do begin
   if a[i]>a[k] then begin e:=a[i];a[i]:=a[k];a[k]:=e; end;
  end;
 end;
end;

begin
 for i:=low(a) to high(a) do begin
  a[i]:=random(100);write(a[i]:5);
 end;
 Sort(1,high(a) div 2);
 Sort(high(a) div 2,high(a));
 Sort(1,high(a));
 writeln;
 for i:=low(a) to high(a) do begin
  write(a[i]:5);
 end;
 readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Только я ни кита не понял зачем такой метод нужен? В чем экономия?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.11.2010, 23:36   #3
LeDиNkо
Пользователь
 
Аватар для LeDиNkо
 
Регистрация: 17.12.2009
Сообщений: 18
По умолчанию

сама не понимаю, в чем его преимущество по сравнению с остальными методами сортировок....
Премного благодарна за помощь
LeDиNkо вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Слияние двух массивов в Delphi sauron99 Помощь студентам 17 03.04.2016 09:37
Слияние с word timesoon Microsoft Office Access 0 03.06.2010 21:29
Слияние Николетта Microsoft Office Word 1 25.05.2009 07:26
Слияние списков Rom@shka Общие вопросы C/C++ 5 07.05.2009 20:24
Слияние Николетта Microsoft Office Excel 2 30.04.2009 04:47