сортировка по возрастанию
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
помогите пожалуйста сделать сортировку по возрастанию и отобразить это в StringGrid
Сортировку чего?
[syntax=Delphi] [/syntax]
сортировку чисел
Отобразить в StringGrid можно с помощью разных методов типа loadfromfile итд итп
Если числа представленны в виде массива, то к примеру можно отсортировать методом Шелла
Цифpовая соpтиpовка (pаспpеделение)
Далее можно отсортировать в самом StringGrid
Если числа представленны в виде массива, то к примеру можно отсортировать методом Шелла
Код: Выделить всё
Procedure Sort( var a : seq); // а - массив //
Var
d, i, t : integer;
k : boolean; // пpизнак пеpестановки //
begin
d:=N div 2; // начальное значение интеpвала //
while d>0 do begin // цикл с yменьшением интеpвала до 1 //
// пyзыpьковая соpтиpовка с интеpвалом d //
k:=true;
while k do begin // цикл, пока есть пеpестановки //
k:=false; i:=1;
for i:=1 to N-d do begin
// сpавнение эл-тов на интеpвале d //
if a[i]>a[i+d] then begin
t:=a[i]; a[i]:=a[i+d]; a[i+d]:=t; // пеpестановка //
k:=true; // пpизнак пеpестановки //
end;
end;
end;
d:=d div 2; // yменьшение интеpвала //
end;
end;
Код: Выделить всё
const D=...; // максимальное количество цифp в числе//
P=...; // основание системы счисления //
Function Digit(v, n : integer) : integer;
// возвpащает значение n-ой цифpы в числе v //
begin
for n:=n downto 2 do v:=v div P;
Digit:=v mod P;
end;
Procedure Sort(var a : Seq);
Var b : array[0..P-2] of integer; // индекс элемента,
следyющего за последним в i-ой гpyппе //
i, j, k, m, x : integer;
begin
for m:=1 to D do begin // пеpебоp цифp, начиная с младшей //
for i:=0 to P-2 do b[i]:=1; // нач. значения индексов //
for i:=1 to N do begin // пеpебоp массива //
k:=Digit(a[i],m); // опpеделение m-ой цифpы//
x:=a[i];
// сдвиг - освобождение места в конце k-ой гpyппы//
for j:=i downto b[k]+1 do a[j]:=a[j-1];
// запись в конец k-ой гpyппы //
a[b[k]]:=x;
// модификация k-го индекса и всех больших //
for j:=k to P-2 do b[j]:=b[j]+1;
end;
end;
Код: Выделить всё
program StringGrid;
uses WinCrt, SysUtils;
const
min = 10;
max = 13;
maxHeap = 1 shl max;
type
heap = array [1..maxHeap] of integer;
heapBase = ^heap;
var
currentSize, heapSize: integer;
A: heapBase;
procedure SwapInts (var a, b: integer);
var
t: integer;
begin
t := a;
a := b;
b := t
end;
procedure InitHeap (size: integer);
var
i: integer;
begin
heapSize := size;
currentSize := size;
Randomize;
for i := 1 to size do
A^[i] := Random(size) + 1;
end;
procedure Heapify (i: integer);
var
left, right, largest: integer;
begin
largest := i;
left := 2 * i;
right := left + 1;
if left <= heapSize then
if A^[left] > A^[i] then
largest := left;
if right <= heapSize then
if A^[right] > A^[largest] then
largest := right;
if largest <> i then
begin
SwapInts (A^[largest], A^[i]);
Heapify (largest)
end
end;
procedure BuildHeap;
var
i: integer;
begin
for i := heapSize div 2 downto 1 do
Heapify (i)
end;
procedure HeapSort;
var
i: integer;
begin
BuildHeap;
for i := currentSize downto 2 do
begin
SwapInts (A^[i], A^[1]);
dec (heapSize);
Heapify (1)
end
end;
type
TAvgTimes = array [min..max] of TDateTime;
var
sTime, eTime, tTime: TDateTime;
i, idx, size: integer;
avgTimes: TAvgTimes;
begin
tTime := 0;
i := min;
size := 1 shl min;
new (A);
while i <= max do
begin
for idx := 1 to 10 do
begin
InitHeap (size);
sTime := Time;
HeapSort;
eTime := Time;
tTime := tTime + (eTime - sTime)
end;
avgTimes[i] := tTime / 10.0;
inc (i);
size := size shl 1;
end;
end.
огромное человеческое спасибо
-
- Сообщения: 5
- Зарегистрирован: 03 апр 2006, 23:23
- Контактная информация:
У меня тоже есть вопрос по сортировке... Чтото не могу придумать как отсортировать переменные стрингового типа... Нужно сделать сортировку методом прямого слияния по-алфавиту и наоборот... Подскажите плз...
welcome to furry world
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
- это массив?переменные стрингового типа
-
- Сообщения: 5
- Зарегистрирован: 03 апр 2006, 23:23
- Контактная информация:
уже понял как стринговые типы сортируюся в дельфе... ТОлько вот чтото не работает она у меня, чтото с циклами напутал :/
Вобщем - дан структурированный файл... (информация которая в таблицу заносится)... вот и нужно сделать чтоб сортировало таблицу, прямо в файле...
Вобщем - дан структурированный файл... (информация которая в таблицу заносится)... вот и нужно сделать чтоб сортировало таблицу, прямо в файле...
welcome to furry world
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Если в файле до 1 - 3 тысяч строк, то можно смело затащить в TStrings (или TStringList... Посмотрите, который из них не абстрактный), отсортировать (есть там готовый метод для этого) и сохранить обратно. (Если строк больше, то тоже можно, но только осторожно).
Хотя, если это задача из домашнего задания по информатике, то такое решение использовать нельзя. Надо будет изобретать свой велосипед, а не кататься на Borland VCL-е.
Хотя, если это задача из домашнего задания по информатике, то такое решение использовать нельзя. Надо будет изобретать свой велосипед, а не кататься на Borland VCL-е.