![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 30.05.2009
Сообщений: 11
|
![]()
Пирамидальная Сортировка где ошибка по чар-емементам?
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Memo1: TMemo; Memo2: TMemo; Label1: TLabel; Label2: TLabel; Edit4: TEdit; Edit1: TEdit; Label3: TLabel; Memo3: TMemo; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button2Click(Sender: TObject); begin close; end; procedure TForm1.Button1Click(Sender: TObject); type Tmas= record w: integer; s: char; s1:char; s2:char; end; procedure Swap(var a,b:char); var tmp: char; begin tmp:=a; a:=b; b:=tmp; end; procedure Sort(var Ns: integer; m: array of Tmas); var i, tmp, pos, mid: integer; begin mid := Ns div 2; for i := mid downto 1 do begin pos := i; while pos<=mid do begin tmp := pos*2; if tmp<Ns then begin if ord(m[tmp+1].s)<ord(m[tmp].s) then tmp := tmp+1; if ord(m[pos].s)>ord(m[tmp].s) then begin Swap(m[pos].s, m[tmp].s); pos:=tmp; end else pos:=Ns; end else if ord(m[pos].s)>ord(m[tmp].s) then begin Swap(m[pos].s, m[tmp].s); pos:=Ns; end else pos:=Ns; end; end; end; var a : array [1..4000] of Tmas; b: array [1..4000] of integer; Sh:real; i,j,n,rand: integer; q1,q2: char; begin Memo1.Clear; Memo2.Clear; randomize; n:=StrToInt(Edit4.Text); for i:=1 to n do begin a[i].w:=random(100); a[i].s:=chr(59+random(100)) ; a[i].s1:=chr(59+random(100)) ; a[i].s2:=chr(59+random(100)) ; Memo1.Lines.Add(IntToStr(a[i].w)); Memo1.Lines.Add(a[i].s+a[i].s1+a[i].s2); end; for i:=n downto 2 do begin Sort(i,A); q1:=a[1].s; q2:=a[i].s; Swap(q1,q2); end; rand:=random(300); Edit1.Text:=IntToStr(rand); for i:=1 to rand do begin b[i]:=random(100); Memo3.Lines.Add(IntToStr(b[i])); end; for i:=1 to n do begin Memo2.Lines.Add(IntToStr(a[i].w)); Memo2.Lines.Add(a[i].s+a[i].s1+a[i].s2); end; end; end. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сортировка Шелла и Шейкер-сортировка | AleksandrMakarov | Паскаль, Turbo Pascal, PascalABC.NET | 11 | 11.03.2012 12:18 |
Сортировка методом линейного выбора и "быстрая" сортировка | Карол | Помощь студентам | 4 | 27.09.2009 19:52 |
Сортировка файлов в Explorer vs сортировка в Delphi | mutabor | Общие вопросы Delphi | 11 | 04.09.2009 14:32 |
Сорт.дерево и пирамидальная сортировка | Санёк20 | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 25.02.2008 18:22 |