Форум: "Основная";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
Внизсортировка Найти похожие ветки
← →
новый (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.031 c