![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
std::sort на делфи
анонимус © (2011-08-16 00:07:00)Есть на c++ такой код:
std::sort(edges, edges + num_edges);
где num_edges - размер массива
edges - массив структур:
typedef struct {
float w;
int a, b;
} edge;
почему к массиву прибавляется integer невкурил, но еджес объявляются такedge *edges
А вопрос - как это грамотно реализовать на делфи? Насколько я понял задача состоит в том, чтобы отсортировать массив по параметру w в структуре. Массивы огромны, надеюсь есть иные способы кроме как в цикле? ну вот как с++ есть же )
Sha (2011-08-16 19:47:00) [1]> анонимус (16.08.11 13:53) [27]
Тебе удалось найти не самую лучшую реализацию быстрой сортировки.
Главный минус - неэффективная сортировка отсортированных данных.
Ищи еще.
Inovet (2011-08-16 14:34:00) [2]> [27] анонимус (16.08.11 13:53)
Ну вот кто такой текст станет читать - глаза и мозг жалко. А сам как с ним работешь? Неужели, по твоему, форматирование не улучшает читаемость?
sniknik (2011-08-16 14:31:00) [3]> остановился я на этом:
зачем было так далеко лезть? QuickSort мог бы и в генофонде найти, хотя бы форматировано было бы получше...
анонимус (2011-08-16 14:19:00) [4]сегментация методом графов
RWolf (2011-08-16 14:15:00) [5]нескромный вопрос: зачем может понадобиться сортировать пикселы со скриншота?
анонимус (2011-08-16 13:53:00) [6]остановился я на этом:
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
анонимус (2011-08-16 13:49:00) [7]омг, массив в среднем размером 768 432 элементов. т.е. если юзать окно 1024*768 он собирается со скрина окна программы. Желательно скрины делать почаще и массивы не слабых размеров вообщем критично, чтобы на каждом этапе было максимальное быстродействие.
Inovet (2011-08-16 12:39:00) [8]> [24] Inovet © (16.08.11 12:38)
Не в ту ветку
Inovet (2011-08-16 12:38:00) [9]Это всё потому что inc синтаксически на функцию похож.
Inovet (2011-08-16 12:27:00) [10]> [22] sniknik © (16.08.11 12:10)
> > В Си++ тоже, иначе бы знал что есть std::sort.
> он знает см. [0]
В смысле: иначе бы знал, как работает std::sort и
> [0] анонимус (16.08.11 00:07)
> почему к массиву прибавляется integer
Ещё функция сравнения элементов нужна для std::sort это operator<.
sniknik (2011-08-16 12:10:00) [11]> Базу ты придумал.
не базу, датасет, самое то для хранения, и обработки данных. база "всплыла" от "наводящих" вопросов в попытке хоть что-то объяснить. без толку конечно, т.к. спрашивали не от желания понять или общаться или раскрыть тему, а с желанием "возразить во чтобы то ни стало".
> В Си++ тоже, иначе бы знал что есть std::sort.
он знает см. [0]
Inovet (2011-08-16 11:57:00) [12]> [4] анонимус (16.08.11 01:35)
> Я в нем не силен
В Си++ тоже, иначе бы знал что есть std::sort.
Игорь Шевченко (2011-08-16 11:35:00) [13]sniknik © (16.08.11 11:31) [19]
Если в память не поместится, то массив не "станет".
> к автору откуда он получается/берется
Автор явно написал - есть код. Сортировки массива. Базу ты придумал.
sniknik (2011-08-16 11:31:00) [14]> Не понял
???
вот станет "огромный массив" "супер огромным" (к автору откуда он получается/берется) и в память не поместится... как будешь обрабатывать? частями. т.е. будешь велосипед для хранения/отбора изобретать или базу возьмешь?
Игорь Шевченко (2011-08-16 11:25:00) [15]sniknik © (16.08.11 11:21) [17]
> тогда даже если память кончится все плавно "переедет" в
> базу.
Не понял, с этого места подробнее, что, куда, когда, зачем переедет.
sniknik (2011-08-16 11:21:00) [16]смысл не в перекладывании, смысл держать их там изначально/получать прямо в них... раз уж "большие объемы". и тогда даже если память кончится все плавно "переедет" в базу.
Игорь Шевченко (2011-08-16 11:02:00) [17]sniknik © (16.08.11 10:37) [15]
Мне, бывает, приходится бороться с людьми, которые как раз промежуточные результаты (среднего объема, десятки, максимум пара сотен тысяч "записей") как раз помещают в разного рода in-memory table. На основании этого опыта могу сказать, что накладные расходы, как по памяти, так и по скорости выполнения, на эти table куда больше, чем на обычный массив в памяти.
sniknik (2011-08-16 10:37:00) [18]:), не, я еще сети знаю, и еще кое чего по мелочи, но оно все никак не привязывается к большому объему данных, в отличие от БД.
Игорь Шевченко (2011-08-16 10:24:00) [19]
> http://www.delphimaster.net/view/1-1137329594
http://anekbook.ru/14036/
sniknik (2011-08-16 10:15:00) [20]вот нашел обсуждение
http://www.delphimaster.net/view/1-1137329594
там у него тоже индекс есть, прочитал, вспомнил, но только один. в стандартных само собой нет и этого.
выбирать нужно что выгоднее в конкретном случае, а если к примеру массив загружается из базы... (ну вот откуда "огромные массивы"?) только для того чтобы отсортировать (ну вот не представляет себе автор другого способа) то ... все очевидно.