Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1313613139
2012
2011-08-18 00:32
2011.12.04
Как получить название месяца и дня недели из текущей даты?


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


15-1313225476
dreamse
2011-08-13 12:51
2011.12.04
Подскажите компонент или юнит для построения вот таких графиков


2-1313755879
Cobalt
2011-08-19 16:11
2011.12.04
проверка строки на соответсвие маске


15-1313175489
PreDatoR
2011-08-12 22:58
2011.12.04
Что за ссылки в компиляторе дельфи?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский