Посл.ответ |
Сообщение |
Ранг: 36.8 (посетитель) Активность: 0.02↘0 Статус: Участник
|
Создано: 22 января 2007 08:22 · Личное сообщение · #1
Всем привет...
Вот код:
Procedure Sort_Shell(var a: array of Word);
var
bis, i, j, k: LongInt;
h: Word;
begin
bis := High(a);
k := bis shr 1;// div 2
while k > 0 do
begin
for i := 0 to bis - k do
begin
j := i;
while (j >= 0) and (a[j] > a[j + k]) do
begin
h := a[j];
a[j] := a[j + k];
a[j + k] := h;
if j > k then
Dec(j, k)
else
j := 0;
end; // {end while]
end; // { end for}
k := k shr 1; // div 2
end; // {end while}
end;
И есть пару вопросов...
1. Как узнать процент выполнения сортировки Shell
2. Является ли это самым быстрым методом сортировки... Если нет, то какой самый быстрый.
P.S. Надо отсортировать массив строк...
| Сообщение посчитали полезным: |
|
 Ранг: 990.2 (! ! !), 380thx Активность: 0.68↘0 Статус: Модератор Author of DiE
|
Создано: 22 января 2007 08:28 · Личное сообщение · #2
www.hardline.ru/1/11/1351/
www.google.com/ - вперёд
----- [nice coder and reverser] | Сообщение посчитали полезным: |
 Ранг: 240.5 (наставник) Активность: 0.19↘0 Статус: Участник Author of ACKiller
|
Создано: 22 января 2007 09:32 · Личное сообщение · #3
NeoTall пишет:
1. Как узнать процент выполнения сортировки Shell
Прога для замера времени выполнения кода:
downloadfinder.intel.com/scripts-df-external/Product_Filter.aspx?ProductID=232&lang=eng
Требуется небольшая регистрация, но зато бесплатная =)
| Сообщение посчитали полезным: |
 Ранг: 387.4 (мудрец) Активность: 0.17↘0 Статус: Участник системщик
|
Создано: 22 января 2007 09:42 · Поправил: s0larian · Личное сообщение · #4
NeoTall, чувак, а ты не можешь забить строки в TList/TStringArray (не помню дельфи, много лет уже прошло) и вызвать sort() ? Получишь quick sort - и всё.
Ну а про производительность - сделай цикл вызывающий это чуда кодинга 100 000 раз и вызыви GetPerformanceCounter() до и после.
| Сообщение посчитали полезным: |
Ранг: 36.8 (посетитель) Активность: 0.02↘0 Статус: Участник
|
Создано: 22 января 2007 09:52 · Личное сообщение · #5
Всем кто ответил сенкс... Тока вы меня видимо не поняли
Вариантов-то сортировки до самого копчика есть...на Дельфах... Т.ч. второй вопрос - это так для проформы... А по поводу первого, не так поняли... Я имел ввиду именно ПРОЦЕНТ!!! Не время, а процент, в смысле для отображения, скажем на ПрогрессБаре. Если есть 20000 строк, я их сортирую положим ShellSort или QuickSort. Как мне отобразить процент выполнения сортировки???
| Сообщение посчитали полезным: |
 Ранг: 240.5 (наставник) Активность: 0.19↘0 Статус: Участник Author of ACKiller
|
Создано: 22 января 2007 10:02 · Личное сообщение · #6
NeoTall пишет:
Как мне отобразить процент выполнения сортировки???
Сначала попробуй в основном цикле поставить увеличение счетчика. Запусти, посмотри как у тебя он увеличивается по времени - квадатично, показательно, а потом измени на аналогичную функцию.
Скорее всего квадратично, но проверь.
| Сообщение посчитали полезным: |
 Ранг: 387.4 (мудрец) Активность: 0.17↘0 Статус: Участник системщик
|
Создано: 22 января 2007 10:30 · Личное сообщение · #7
NeoTall,  ааа вот в чём дело... Тогда как пишет HoBleen - свой собственный цикл. В нём реализуешь, скажем, quick sort у которого computational complexity O(n*log(n)). Потом смотришь сколько у тебя элементов и считаешь приблизительное количество перестановок.
Потом просто - скажем у тебя 100 шагов в progress bar, на каждый шаг получается Х перестановок. Вот и делаешь StepIt() каждые Х перестановок.
| Сообщение посчитали полезным: |
Ранг: 310.8 (мудрец), 29thx Активность: 0.43↘0 Статус: Участник
|
Создано: 23 января 2007 00:03 · Личное сообщение · #8
NeoTall пишет:
1. Как узнать процент выполнения сортировки Shell
Правильный ответ - никак. Меня всегда забавляли прогрессбары Микрософта, которые отражали процент неизвестно чего и росли скачками. Для того чтобы точный процент узнать пришлось бы сортировку два раза делать - один раз для калибовки прогрессбара и второй раз "красиво"...
Если нужны "шашечки" - тогда действительно привязатся к счетчику и "морочить юзерам голову".
| Сообщение посчитали полезным: |