1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Не могу понять,до и после сортировки одно и тоже время....
Код
writeln('Kolichestvo chisel v massive:'); readln(rnd); for i:=1 to rnd do begin data[i]:=random(rnd); end; writeln('poluchenniy massiv:'); for i:=1 to rnd do begin write(data[i],' '); end; writeln; begin gettime(h,m,s,ms); quicksort(data,1,rnd); gettime(h1,m1,s1,ms1); writeln('Otsortirovanniy massiv:'); for i:=1 to rnd do write(data[i],' '); writeln('s:',h,':',m,':',s,':',ms); writeln('e:',h1,':',m1,':',s1,':',ms1); end; end.
кто может сказать...еще,как вычислить теперь значение времени,за которое отсортировалось.?
Просто выполняется сортировка слишком быстро. Прогони ее сотни тысяч раз в цикле, а потом послеченное время подели на кол-во итераций, что бы примерно подсчитать время выполнения сортировки.
--------------------
Помогая друг другу, мы справимся с любыми трудностями! "Не опускать крылья!" (С)
Да ... видимо время работы менее 1 мс, вот тебе на следующий раз модуль для замера времениб чтобы постоянно не юзать gettime
Модуль и пример работы :
Unit XTIMER;
INTERFACE Var elapsed: Longint; { прошедшее время, в милисекундах. } Procedure ClockOn; { включает счётчик времени } Procedure ClockOff; { выключает его } Procedure PrintTime; { выводит прошедшее время }
procedure clockon; begin start:=clock; end; procedure clockoff; begin elapsed:=clock-start; end; Procedure PrintTime; begin writeln('Elapsed time = ',elapsed, ' ms'); end;
BEGIN Port [$43] := $34; { need rate generator, not square wave } Port [$40] := 0; { generator as programmed by some BIOSes } Port [$40] := 0; { for timer 0 } END.
uses xtimer; var i : integer; begin i := 1; ClockOn; repeat inc(i); until i = 1000; ClockOff; PrintTime; readln; end.
--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
кто может подсказать еще насчет геттайма...Как вычислить значение времени,за которое совершена сортировка,имея 2 отрезка времени(начало и конец)...не вычитать же?(что собсно говоря сойдет,если у вас быстрый комп(тк...несколько мс выполняется,и можно просто мс-ды вычесть)
Почему нет ?! Посчитал на одном отрезке, закомнил, посчитал на втором, прибавил, лишний байт для переменной жалко ? Ну или парочку
Ну а все же....Ну это у меня дома даже 19к сортируется,бывает меньшьше чем за 1мс,а если я приду к своей преподавательнице,и у меня там секунд 5 он сортировать будет...
respect volvo,оч помог. на будущее,кто будет искать...или кому лень будет
Код
program Kviksort; uses crt,dos; const n=20000; type list=array[1..n] of integer; var data:list; i,rnd: integer; start:word;
function Gettime:LongInt; var h,m,s,ms:word; begin dos.gettime(h,m,s,ms); gettime:=ms+100*(s+60*(m+60*h)); end;
procedure quicksort(var a:list; min,max: integer); procedure sort(l,r: integer); var i,j,x,y: integer; begin i:=l; j:=r; x:=a[(l+r) div 2]; repeat while a[i]<x do i:=i+1; while x<a[j] do j:=j-1; if i<=j then begin y:=a[i]; a[i]:=a[j]; a[j]:=y; i:=i+1; j:=j-1; end; until i>j; If l<j then sort(l,j); If i<r then sort(i,r); end; begin sort(min,max); end; begin randomize; writeln; writeln('Kolichestvo chisel v massive:'); readln(rnd); for i:=1 to rnd do begin data[i]:=random(rnd); end; writeln('poluchenniy massiv:'); for i:=1 to rnd do begin write(data[i],' '); end; writeln; begin gettime; start:=gettime; quicksort(data,1,rnd); writeln('Otsortirovanniy massiv:'); for i:=1 to rnd do write(data[i],' '); writeln; write('vremya sortirovki=',gettime-start,'ms'); end; end.