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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2009, 20:19   #1
Лексей
 
Регистрация: 30.11.2009
Сообщений: 7
По умолчанию Сортировка подсчетом (delphi)

Здраствуйте уважаемые.Сильно не пинайте поступил на заочку первая сессия поэтому пока не блещу познаниями. Делаю задание: рандомное заполнение массива, сортировка его по возрастанию и убыванию методом подсчета алгоритм с.
собственно сделал следущее для наглядности
Код:
procedure TForm1.Button1Click(Sender: TObject);
Var a,b,c   : array[1..1000] of integer;
    n,i,j  : integer;

Begin
for i:=1 to 1000 do
  a[i]:=random(10000);{Определение размера массива A  и его заполнение}
    for i := 1 to 1000  do
      stringgrid1.Cells[i-1,0]:=  inttostr(a[i]);

     begin{сортировка данных}

 for i:=1 to 1000 do
 begin
  j:=i;
  while (j>1) and (b[j-1]>A[i]) do
   begin
    b[j]:=b[j-1];
    j:=j-1;
   end;
  b[j]:=A[i];
 end;

  label3.Caption:='Времясортировки='+inttostr(Total) ;
begin {Вывод массива B}
for i :=1 to 1000 do

stringgrid2.Cells[i-1,0]:=  inttostr(b[i]);
end;
for i:=1 to 1000 do  {}
 begin
  j:=i;
  while (j>1) and (c[j-1]<A[i]) do
   begin
    c[j]:=c[j-1];
    j:=j-1;
   end;
  c[j]:=A[i];
 end;
 begin {Вывод массива B}
for i :=1 to 1000 do

stringgrid3.Cells[i-1,0]:=  inttostr(c[i]);
end;
     end;
        end;



end.
а теперь вопрос какой алгоритм у моего метода сортировки? зная алгоритм надеюсь сам справиться с остальным.
Лексей вне форума Ответить с цитированием
Старый 30.11.2009, 20:53   #2
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Читайте про свой алгоритм здесь:
http://ru.wikipedia.org/wiki/%D0%A1%...B0%D0%BC%D0%B8
Скандербег вне форума Ответить с цитированием
Старый 30.11.2009, 21:12   #3
Лексей
 
Регистрация: 30.11.2009
Сообщений: 7
По умолчанию

ага нашел свой алгоритм. посмотрим...
Лексей вне форума Ответить с цитированием
Старый 30.11.2009, 21:22   #4
Adamrus
Пользователь
 
Аватар для Adamrus
 
Регистрация: 26.11.2009
Сообщений: 59
Радость

a[i]:=random(10000);{Определение размера массива A и его заполнение}
его размер Вы определили еще в разделе VAR

размер динамического массива определяют так:
var
MyArray: array of Integer;
begin
SetLength(MyArray,1000);

Последний раз редактировалось Adamrus; 30.11.2009 в 21:24.
Adamrus вне форума Ответить с цитированием
Старый 30.11.2009, 21:30   #5
Лексей
 
Регистрация: 30.11.2009
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Adamrus Посмотреть сообщение
a:=random(10000);{Определение размера массива A и его заполнение}
его размер Вы определили еще в разделе VAR

размер динамического массива определяют так:
var
MyArray: array of Integer;
begin
SetLength(MyArray,200);
да правильно там происходит заполнение массива надписи остались от другого забыл стереть

меня интересует именно сортировка сам массивв заполняется и сортируется тем что я выложил теперь бы понять свой алгоритм и прикрутить его

пс и ещё подскажите как подсчитать время затраченное не сортировку???

Последний раз редактировалось Лексей; 30.11.2009 в 21:34.
Лексей вне форума Ответить с цитированием
Старый 30.11.2009, 21:37   #6
Adamrus
Пользователь
 
Аватар для Adamrus
 
Регистрация: 26.11.2009
Сообщений: 59
По умолчанию

перед стартом включить Timer, после выхода выключить, то что он насчитал, вывести в лог
Adamrus вне форума Ответить с цитированием
Старый 30.11.2009, 21:48   #7
Лексей
 
Регистрация: 30.11.2009
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Adamrus Посмотреть сообщение
перед стартом включить Timer, после выхода выключить, то что он насчитал, вывести в лог
а не сложно выложить как он вкл и выкл
Лексей вне форума Ответить с цитированием
Старый 30.11.2009, 22:42   #8
Adamrus
Пользователь
 
Аватар для Adamrus
 
Регистрация: 26.11.2009
Сообщений: 59
По умолчанию

c Таймером я поспешил.
сейчас вот написал для проверки:
Код:
var
  Form1: TForm1;
  t,t1:TDateTime;
перед стартом алгоритма:
Код:
t:=Time;
после окончания:
Код:
t1:=Time;
ShowMessage(TimeToStr(t1-t));
загвозка в том, как выводить миллисекунды. Комп настолько быстро обрабатывает, что в ответе почти всегда будет "0:00:00"
Adamrus вне форума Ответить с цитированием
Старый 01.12.2009, 00:21   #9
Лексей
 
Регистрация: 30.11.2009
Сообщений: 7
По умолчанию

я нашел вот такую байду
OperBegin := DateTimeToTimeStamp(Now) ;

[B OperEnd := DateTimeToTimeStamp(Now);
Total := OperEnd.Time - OperBegin.Time;[/B]

вроде работает но выводит тож 0 правда если часто нажимать батон то раз в 15-20 запусков выскакиевает 15-16 мс

ншел такой алгоритм
Код:
for i:=0 to 255 do
 C[i]:=0;
 for i:=1 to N do
 C[A[i]]:=C[A[i]]+1;
 for i:=1 to 255 do
 C[i]:=C[i-1]+C[i];
 for i:=N downto 1 do
 begin
  B[C[A[i]]]:=A[i];
  C[A[i]]:=C[A[i]]-1;
но что-то не могу его прикрутить

и ещё нашел такой алгоритм
Код:
SimpleCountingSort
    for i = 0 to k - 1
        C[i] = 0;
    for i = 0 to n - 1
        C[A[i]] = C[A[i]] + 1;
    b = 0;
    for j = 0 to k - 1
        for i = 0 to C[j] - 1
            A[b] = j;
            b = b + 1;
так какой верно и как его прикрутить???

Последний раз редактировалось Stilet; 02.12.2009 в 10:16.
Лексей вне форума Ответить с цитированием
Старый 02.12.2009, 13:20   #10
Лексей
 
Регистрация: 30.11.2009
Сообщений: 7
По умолчанию

алгоритм понял
делаем нулевой массив
Код:
for j:=0 to 10000 do
 z[j]:=0;
затем из массива а помещаем в массив z в ячейку № a(i)
Код:
for i:=1 to 1000 do

    z[a[i]]:=z[a[i]]+1;
но доделать и прилепить не могу
Лексей вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OpenGL проблема с подсчетом FPS AS10 Мультимедиа в Delphi 4 15.09.2009 21:17
Сортировка файлов в Explorer vs сортировка в Delphi mutabor Общие вопросы Delphi 11 04.09.2009 14:32
сортировка в Delphi menX Помощь студентам 3 17.04.2009 22:47
Помогите пожалуйста!(Pascal) с подсчетом букв Tubus Помощь студентам 2 15.12.2008 20:27
http, socks5 proxy с подсчетом пропускаемого траффа XoTTa6bI2 Фриланс 4 06.04.2007 12:58