Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.12.04;
Скачать: CL | DM;

Вниз

std::sort на делфи   Найти похожие ветки 

 
анонимус   (2011-08-16 00:07) [0]

Есть на c++ такой код:

std::sort(edges, edges + num_edges);
где  num_edges - размер массива
     edges - массив структур:

typedef struct {
 float w;
 int a, b;
} edge;


почему к массиву прибавляется integer невкурил, но еджес объявляются так edge *edges

А вопрос - как это грамотно реализовать на делфи? Насколько я понял задача состоит в том, чтобы отсортировать массив по параметру w в структуре. Массивы огромны, надеюсь есть иные способы кроме как в цикле? ну вот как с++ есть же )


 
Германн ©   (2011-08-16 00:54) [1]


> А вопрос - как это грамотно реализовать на делфи? Насколько
> я понял задача состоит в том, чтобы отсортировать массив
> по параметру w в структуре.

А для этого надо обязательно переводить процедуру сортировки из Си на Дельфи?
Задача-то какая?


 
анонимус   (2011-08-16 01:14) [2]

задача внизу описана, как можно скоростнее отсортировать массив структур по значению w в структуре.


 
Германн ©   (2011-08-16 01:32) [3]


> задача внизу описана, как можно скоростнее отсортировать
> массив структур по значению w в структуре.

А это определятся только опытным путём. Какой алгоритм сортировки следует использовать в данном случае. И этот вопрос не имеет отношения к языкам программирования.


 
анонимус   (2011-08-16 01:35) [4]

эм, в с++ это делается не в цикле а той процедурой, сдается мне что наличие встроенной процедуры экономит время. В делфи я нашел только циклами колбасить, вот спрашиваю нет ли чего подобного в делфи. Я в нем не силен )


 
анонимус   (2011-08-16 01:36) [5]

т.е. не только время написания, но время исполнения ))


 
Вариант   (2011-08-16 06:52) [6]


> анонимус   (16.08.11 00:07)


Смотри TList.Sort


 
sniknik ©   (2011-08-16 09:23) [7]

> Смотри TList.Sort
почему не DataSet.Sort? ведь -> "Массивы огромны", напрашивается БД и все связанное... для начала хотя бы "безбазовый" датасет под обработку данных.


 
Вариант   (2011-08-16 09:42) [8]


> sniknik ©   (16.08.11 09:23) [7]

Ближайшая ассоциация просто. Вполне и датасет может пойти, зависит от задачи


 
Игорь Шевченко ©   (2011-08-16 09:49) [9]


> почему не DataSet.Sort?


потому что дольше


 
Германн ©   (2011-08-16 09:50) [10]


> анонимус   (16.08.11 01:35) [4]
>
> эм, в с++ это делается не в цикле а той процедурой

Значит цикл сидит внутри той процедуры.


 
sniknik ©   (2011-08-16 09:50) [11]

> зависит от задачи
:)
он считает задача раскрыта (см. up). отсортировать массив.
кстати для массивов (если буквально) встречал где то в недрах VCL процедуру QuickSort но она вроде не "выведена" для прямого использования... видимо чтобы не плодить тормозов от решения таких "задач" напрямую.


 
sniknik ©   (2011-08-16 09:56) [12]

> потому что дольше
не скажи, тут "бабушка надвое", мы уже с кем то спорили тут и сравнивали... (автор быстрой сортировки стринглиста, действительно быстрой... быстрее чем на стандартных компонентах) так если нужно 1 раз то да, быстрее, а если несколько (структура же) со сменой полей и возвратами, то второй раз занимает времени 0, т.к. просто применяется индекс. а сортировка в любом случае занимает примерно одинаковое время.


 
sniknik ©   (2011-08-16 10:15) [13]

вот нашел обсуждение
http://www.delphimaster.net/view/1-1137329594

там у него тоже индекс есть, прочитал, вспомнил, но только один. в стандартных само собой нет и этого.

выбирать нужно что выгоднее в конкретном случае, а если к примеру массив загружается из базы... (ну вот откуда "огромные массивы"?) только для того чтобы отсортировать (ну вот не представляет себе автор другого способа) то ... все очевидно.


 
Игорь Шевченко ©   (2011-08-16 10:24) [14]


> http://www.delphimaster.net/view/1-1137329594


http://anekbook.ru/14036/


 
sniknik ©   (2011-08-16 10:37) [15]

:), не, я еще сети знаю, и еще кое чего по мелочи, но оно все никак не привязывается к большому объему данных, в отличие от БД.


 
Игорь Шевченко ©   (2011-08-16 11:02) [16]

sniknik ©   (16.08.11 10:37) [15]

Мне, бывает, приходится бороться с людьми, которые как раз промежуточные результаты (среднего объема, десятки, максимум пара сотен тысяч "записей") как раз помещают в разного рода in-memory table. На основании этого опыта могу сказать, что накладные расходы, как по памяти, так и по скорости выполнения, на эти table куда больше, чем на обычный массив в памяти.


 
sniknik ©   (2011-08-16 11:21) [17]

смысл не в перекладывании, смысл держать их там изначально/получать прямо в них... раз уж "большие объемы". и тогда даже если память кончится все плавно "переедет" в базу.


 
Игорь Шевченко ©   (2011-08-16 11:25) [18]

sniknik ©   (16.08.11 11:21) [17]


> тогда даже если память кончится все плавно "переедет" в
> базу.


Не понял, с этого места подробнее, что, куда, когда, зачем переедет.


 
sniknik ©   (2011-08-16 11:31) [19]

> Не понял
???

вот станет "огромный массив" "супер огромным" (к автору откуда он получается/берется) и в память не поместится... как будешь обрабатывать? частями. т.е. будешь велосипед для хранения/отбора изобретать или базу возьмешь?


 
Игорь Шевченко ©   (2011-08-16 11:35) [20]

sniknik ©   (16.08.11 11:31) [19]

Если в память не поместится, то массив не "станет".


> к автору откуда он получается/берется


Автор явно написал - есть код. Сортировки массива. Базу ты придумал.


 
Inovet ©   (2011-08-16 11:57) [21]

> [4] анонимус   (16.08.11 01:35)
> Я в нем не силен

В Си++ тоже, иначе бы знал что есть std::sort.


 
sniknik ©   (2011-08-16 12:10) [22]

> Базу ты придумал.
не базу, датасет, самое то для хранения, и обработки данных. база "всплыла" от "наводящих" вопросов в попытке хоть что-то объяснить. без толку конечно, т.к. спрашивали не от желания понять или общаться или раскрыть тему, а с желанием "возразить во чтобы то ни стало".

> В Си++ тоже, иначе бы знал что есть std::sort.
он знает см. [0]


 
Inovet ©   (2011-08-16 12:27) [23]

> [22] sniknik ©   (16.08.11 12:10)
> > В Си++ тоже, иначе бы знал что есть std::sort.
> он знает см. [0]

В смысле: иначе бы знал, как работает std::sort и

> [0] анонимус   (16.08.11 00:07)
> почему к массиву прибавляется integer

Ещё функция сравнения элементов нужна для std::sort это operator<.


 
Inovet ©   (2011-08-16 12:38) [24]

Это всё потому что inc синтаксически на функцию похож.


 
Inovet ©   (2011-08-16 12:39) [25]

> [24] Inovet ©   (16.08.11 12:38)

Не в ту ветку


 
анонимус   (2011-08-16 13:49) [26]

омг, массив в среднем размером 768 432 элементов. т.е. если юзать окно 1024*768 он собирается со скрина окна программы. Желательно скрины делать почаще и массивы не слабых размеров вообщем критично, чтобы на каждом этапе было максимальное быстродействие.


 
анонимус   (2011-08-16 13:53) [27]

остановился я на этом:

Program QuickSort;
Var A : array[1..1000] of integer;
N,T : integer;
Procedure Sort(p,q : integer); {p,q — индексы начала и конца сортируемой части массива}
Var i,j,r : integer;
Begin
if p<q then {массив из одного элемента тривиально упорядочен}
begin
r:=A[p];
i:=p-1;
j:=q+1;
while i<j do
begin
repeat
i:=i+1;
until A[i]>=r;
repeat
j:=j-1;
until A[j]<=r;
if i<j then
begin
T:=A[i];
A[i]:=A[j];
A[j]:=T;
end;
end;
Sort(p,j);
Sort(j+1,q);
end;
End;
Begin
{Определение размера массива A — N) и его заполнение}

{запуск сортирующей процедуры}
Sort(1,N);
{Вывод отсортированного массива A}

End.

только переделаю под себя http://skachivaem.ru/articles/50-delphi/223--delphi.html


 
RWolf ©   (2011-08-16 14:15) [28]

нескромный вопрос: зачем может понадобиться сортировать пикселы со скриншота?


 
анонимус   (2011-08-16 14:19) [29]

сегментация методом графов


 
sniknik ©   (2011-08-16 14:31) [30]

> остановился я на этом:
зачем было так далеко лезть? QuickSort мог бы и в генофонде найти, хотя бы форматировано было бы получше...


 
Inovet ©   (2011-08-16 14:34) [31]

> [27] анонимус   (16.08.11 13:53)

Ну вот кто такой текст станет читать - глаза и мозг жалко. А сам как с ним работешь? Неужели, по твоему, форматирование не улучшает читаемость?


 
Sha ©   (2011-08-16 19:47) [32]

> анонимус   (16.08.11 13:53) [27]

Тебе удалось найти не самую лучшую реализацию быстрой сортировки.
Главный минус - неэффективная сортировка отсортированных данных.
Ищи еще.



Страницы: 1 вся ветка

Текущий архив: 2011.12.04;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.014 c
2-1312985507
Kalten
2011-08-10 18:11
2011.12.04
непонятки в создании меню в проекте delphi7


2-1313689507
Pcrepair
2011-08-18 21:45
2011.12.04
Как получить цвет пикселя из палитры BMP 8bit


2-1313476457
Cobalt
2011-08-16 10:34
2011.12.04
Left side cannot be assigned to (D2007)


15-1313057260
antonn (work)
2011-08-11 14:07
2011.12.04
Баннер справа


2-1313196605
Gu
2011-08-13 04:50
2011.12.04
Запущена ли Delphi IDE