Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.06;
Скачать: CL | DM;

Вниз

сортировка   Найти похожие ветки 

 
новый   (2004-01-24 21:16) [0]

Мастера, помогите пожалуйста, почему у меня не работает процедура сортировки. Где может быть ошибка?
procedure Sortsalary(var pp:Table);
var x : Employ;
i, j, n: integer;
begin
n:= length(pp);
for i:=0 to n-1 do
for j:=0 to n-2 do
if pp[j].plat > pp[j+1].plat then
begin
x:=pp[j+1];
pp[j+1]:=pp[j];
pp[j]:=x;
end;
end;


 
Stilgar ©   (2004-01-24 21:38) [1]

А можно узнать, что такое Table и Employ? Прошу прощения, наверное у меня склероз.


 
CyberFreak ©   (2004-01-24 21:54) [2]

Надо думать, Table - это массив элементов типа Employ. И этот массив надо отсортировать по полю plat. Было бы неплохо, если бы ты показал, как эти типы у тебя описаны.


 
CyberFreak ©   (2004-01-24 21:57) [3]

Да, и еще неплохо было знать, что значит "не работает". Вообще вроде как похоже на правду, меня тока смущает строка:

n:= length(pp);


 
alexx   (2004-01-24 21:59) [4]

Описание типов:
type
ss = String [20];
Employ = record
fam: ss;
im: ss;
ot: ss;
plat: real;
end;
Table = array of Employ;


 
новый   (2004-01-24 21:59) [5]

Описание типов:
type
ss = String [20];
Employ = record
fam: ss;
im: ss;
ot: ss;
plat: real;
end;
Table = array of Employ;


 
новый   (2004-01-24 22:03) [6]

Программа запускается, но при вызове функции выдает ошибку: нарушение доступа по адресу ...


 
jack128 ©   (2004-01-24 22:05) [7]

Процедурка должна сортировать. Хотя её можно и оптимизировать..


 
jack128 ©   (2004-01-24 22:06) [8]

Ах ну да.

for i:=0 to n-2 do
for j:=0 to n - 2 - i do


 
новый   (2004-01-24 22:22) [9]

Все равно выдает ошибку.


 
Stilgar ©   (2004-01-24 22:27) [10]

Чтобы было быстрее, внешний цикл сортировки пузырьком должен быть while или repeat с флагом, который устанавливается, когра не одна пара элементов не была перемещена. Но почему не работает, я не понимаю.
Пришел в голову очевидный вариант: до вызова процедуры SetLength делаете? Больше чем на один елемент массива?


 
BorH ©   (2004-01-24 22:36) [11]

program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

type
ss = String [20];
Employ = record
fam: ss;
im: ss;
ot: ss;
plat: real;
end;
Table = array of Employ;

procedure Sortsalary(var pp:Table);
var
x : Employ;
i, j, n: integer;
begin
n:= length(pp);

for i:=0 to n-1 do
for j:=0 to n-2 do
if pp[j].plat > pp[j+1].plat then
begin
x:=pp[j+1];
pp[j+1]:=pp[j];
pp[j]:=x;
end;
end;

var
i:integer;
PP:Table;

begin
randomize;

SetLength(PP,10);

for i:=0 to Length(PP)-1 do
begin
PP[i].plat:=random(100);
Write(PP[i].plat:4:0);
end;
Writeln;

Sortsalary(PP);

Writeln("Sorted!");

for i:=0 to Length(PP)-1 do
begin
Write(PP[i].plat:4:0);
end;

Readln;
end.


Всё пашет...
У тебя что-то или с машиной, или с системой или... :)) Будем надеятся, что с первыми двумя :))


 
TUser ©   (2004-01-25 08:12) [12]

Вообще-то Stilgar прав - алгоритм, мягко говоря, не оптимальный. Даже если оставаться в пределах квадратичного алгоритма - так лучше его поразумнее организовать. Типа на каждом шаге упорядочены первые N элементов. Берем N+1-й, ищем куда бы его поставить. Если требуется смещаем элементы - побыстрее будет. Ну, а если length(Table) - это много, тогда пузырьками и прочее.



Страницы: 1 вся ветка

Текущий архив: 2004.02.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
4-16819
Talla2k
2003-11-27 14:01
2004.02.06
Dll и сообщение


14-16622
LSV
2004-01-15 03:16
2004.02.06
Подскажите, какие книги по Delphi 7 самые лучшие?


6-16550
Haxx
2003-12-03 15:51
2004.02.06
Какая библиотека нужна для коннект с MySQL


3-16176
Sibskan
2004-01-13 16:48
2004.02.06
Такая ошибка Connection is in use by another statement


8-16529
jonni
2003-09-30 21:10
2004.02.06
Можно ли сравнит две Icon?