Форум: "Начинающим";
Текущий архив: 2011.12.04;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.003 c