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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2012, 20:35   #1
Bottane4ka
Пользователь
 
Регистрация: 21.12.2011
Сообщений: 10
По умолчанию Сортировка списка методом выбора и простыми вставками

Здравствуйте
Второй день пытаюсь решить задание.
Проблема в непонимании списков.
Задание: Сравнить метод простой вставки и метод выбором.
Я сделала программу с использованием массивов.
Преподаватель сказал сделать с связными списками, которых я не понимаю. Прошу объяснить мне как переделать программу, хотя бы одну сортировку.
Программа состоит из формы и модуля.
Вот мой код с массивами:
Форма:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ModSravn;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Memo1: TMemo;
    Button2: TButton;
    Button3: TButton;
    Memo2: TMemo;
    Memo3: TMemo;
    Memo4: TMemo;
    Memo5: TMemo;
    Label2: TLabel;
    Memo6: TMemo;
    Memo7: TMemo;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var TA:TKlas1;
procedure TForm1.Button1Click(Sender: TObject);
  var n:integer;
begin
  n:=StrToInt(Edit1.Text);
  Memo1.Clear;
  Button2.Visible:=True;
  Button3.Visible:=True;
  TA:=TKlas1.Create;
  TA.NewMas(n);
  TA.Output(Memo1);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Memo2.Clear;
  TA.Sort1;
  TA.Output(Memo2);
  TA.Output1(Memo4,Memo6);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Memo3.Clear;
  TA.Sort2;
  TA.Output(Memo3);
  TA.Output1(Memo5,Memo7);
end;

end.
Модуль:
Код:
unit ModSravn;

interface

 uses Sysutils,Classes,StdCtrls,Grids;

 type Tm=array of integer;

 type TKlas=class(TObject)
  private
    ma:Tm;
    mb:Tm;
    ms1:integer;
    ms2:integer;
    property a:Tm read ma write ma;
    property b:Tm read mb write mb;
    property s1:integer read ms1 write ms1;
    property s2:integer read ms2 write ms2;
  public
    procedure NewMas(n:integer);
    procedure Output(Memo:TMemo);
    procedure Output1(Memo1,Memo2:TMemo);
end;

type TKlas1=class(TKlas)
  public
    procedure Sort1;
    procedure Sort2;
  end;

implementation

procedure TKlas.NewMas(n: Integer);
  var i:integer;
begin
  randomize;
  setLength(ma,n);
  setLength(mb,n);
  for i:=1 to n-1 do
    begin
      a[i]:=random(100)-50;
      b[i]:=a[i];
    end;
end;

procedure TKlas.Output(Memo: TMemo);
  var i:integer;
begin
  for i:=0 to Length(a)-1 do
    begin
      Memo.Lines.Add(IntToStr(a[i]));
    end;
end;

procedure TKlas.Output1(Memo1: TMemo; Memo2: TMemo);
begin
  Memo1.Clear;
  Memo2.Clear;
  Memo1.Lines.Add(IntToStr(ms1));
  Memo2.Lines.Add(IntToStr(ms2));
end;

{Сортировка выбором}
procedure TKlas1.Sort1;
  var min,mini,k,i,j:integer;
begin
  ms1:=0;
  ms2:=0;
  for i:=0 to Length(a)-2 do
    begin
      min:=a[i];
      mini:=i;
      for j:=i+1 to Length(a)-1 do
        begin
          if a[j]<min then
            begin
              min:=a[j];
              mini:=j;
            end;
          inc(ms1); {Увиличиваем число сравнений}
        end;
      if a[i]<>min then
        begin
         k:=a[i];
         a[i]:=min;
         a[mini]:=k;
         inc(ms2); {Увиличиваем число перестановок}
        end;
    end;
end;

{Сортировка простыми вставками}
procedure TKlas1.Sort2;
  var i,j,p:integer;
begin
  ms1:=0;
  ms2:=0;
  a:=b;
  for i:=1 to Length(a)-1 do
    begin
      for j:=0 to i do
        begin
          inc(ms1); {Увиличиваем число сравнений}
          if a[j]>a[i] then
            begin
              p:=a[j];
              a[j]:=a[i];
              a[i]:=p;
              inc(ms2);{Увиличиваем число перестановок}
            end;
        end;
    end;
end;
end.
Заранее спасибо
Bottane4ka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ сортировка методом выбора zaki Помощь студентам 0 12.12.2011 16:45
Сортировка однонаправленого списка вставками. gvilon Паскаль, Turbo Pascal, PascalABC.NET 0 08.11.2011 23:39
сортировка простыми вставками Valentinka25 Паскаль, Turbo Pascal, PascalABC.NET 1 03.04.2011 22:48
Сортировка массива простыми вставками на Delphi Алексей777911 Помощь студентам 3 21.04.2010 18:31