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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2015, 19:46   #1
Никита757
Пользователь
 
Регистрация: 14.05.2015
Сообщений: 57
По умолчанию Сортировка слиянием

Реализовать сортировку списка следующим способом: список разделить на n частей, каждый сортировать независимо, затем провести слияние в выходной список. Может кто-нибудь помочь с сортировкой слиянием? У меня реализована сортировка пузырьком, но это в корне неправильно
Код:
unit list_unit;

interface

      
type
 TDataTipe = integer;
 PTItem = ^TItem;
 TItem = Record
   Data : TDataTipe;
   Next : PTItem;
 end;
 
Procedure Inc(var Item: PTItem; Data: TDataTipe);
Procedure Sorta(Head:PTItem) ;
Procedure Showlist(Head : PTItem);

implementation

//Добавляем в список
Procedure Inc(var Item: PTItem; Data: TDataTipe);
var
  res : PTItem;
begin
    new(res);
    res^.Data:=Data;
    res^.Next:=Item;
    Item := res;
end;

//Сортировка
procedure Sorta(Head: PTItem);
var i,j,min:PtItem;v:TDataTipe;
begin
 i:=Head;
 while i<>nil do
 begin
   j:=i^.Next;
   while j<>nil do
   begin
    if i^.Data < j^.Data then
    begin
      v:=i^.Data; 
      i^.Data:=j^.data; 
      j^.data:=v;
    end;
    j:=j^.next;
   end;
   i:=i^.Next;
 end;
end;
 
procedure Showlist(Head: PTItem);
begin 
  while Head <> nil do
  begin
    writeln(Head^.Data);
    Head := Head^.next;
  end;
end;
end.
Код:
uses
  list_unit;
  
var simbol:string; IOResult:integer;
  list : PTItem;
  i, n_chastey, chislovaya_perem : integer;
  
begin
  writeln('Сколько частей вы хотите ввести?');
  repeat
  readln(simbol); val(simbol,n_chastey,IOResult);
  if IOResult<>0 then writeln('Введите количество частей еще раз');
  until IOResult=0;
  for i := 1 to n_chastey do
  begin
    writeln('Введите число №', i);
    repeat
    readln(simbol); val(simbol,chislovaya_perem,IOResult);
    if IOResult<>0 then writeln('Введите число №', i);
    until IOResult=0;
    Inc(list, chislovaya_perem);
  end;
  
  writeln('Список:');
  sorta(list);
  showlist(list);
end.

Последний раз редактировалось Stilet; 30.11.2015 в 19:49.
Никита757 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C++] Сортировка слиянием syxov Помощь студентам 0 26.09.2012 21:46
Сортировка слиянием. С++ Noizik Помощь студентам 1 09.05.2012 14:23
Сортировка слиянием Aндрей Общие вопросы C/C++ 3 15.04.2010 09:47
Сортировка слиянием maxflint Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 05.12.2009 20:41