Реализация сортировки

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

Реализация сортировки

Сообщение Medveckij 28 янв 2013, 08:06

Добрый день, товарищи :)

Вопрос из разряда "стыдно спрашивать, но жуть как хочется знать правду". Сразу скажу, что прежде чем написать, перерыл все что поддавалось лопате. И в некоторых местах даже нашел ответ, но... не понял о чем идет речь.

И так, ближе к телу.

У нас есть лист targets набитый трансформами.

Вот тут мы обращаемся к нашему листику и осуществляем сортировку путем сравнивания дистанций. 1) объект t1, наша дистанция 2) объект t2, наша дистанция. Каким образом отдается предпочтение одному из трансформеров я знаю. А вот даааальше, как осуществляется сама сортировка понять не могу. Каким таким макаром этот самый трансформ оказывается на месте нулевого элемента? Как выглядит это решение? Что и от чего отнимается, умножается и пр. чтобы получилось так как получается?

T.e. практика меня не интересует, применить все это дело мы умеемc. А вот теория... Объясните пожалуйста.

Синтаксис:
Используется csharp
targets.Sort(delegate(Transform t1, Transform t2)
{
return Vector3.Distance(t1.position, myTransform.position).CompareTo(Vector3.Distance(t2.position, myTransform.position));
}
               
);     
 


Зарание огромное спасибо!

P.S. В самом редакторе код смотрится хорошо. А при заливке сообщения на форум, ...ниться до неузнаваемости. Это я к тому, что я не виноват... не в чем.

Скрытый текст:
:D
Аватара пользователя
Medveckij
Адепт
 
Сообщения: 1014
Зарегистрирован: 10 ноя 2012, 15:44

Re: Реализация сортировки

Сообщение Medveckij 28 янв 2013, 15:25

T.e. фига мне, а не объяснение?
Аватара пользователя
Medveckij
Адепт
 
Сообщения: 1014
Зарегистрирован: 10 ноя 2012, 15:44

Re: Реализация сортировки

Сообщение AndreyMust19 28 янв 2013, 15:34

Все очень просто:
0) Начинаем с первого элемента
1) Ищем минимальный элемент между начальным и конечным
2) Меняем его местами с начальным
3) Делаем след. элемент начальным
4) Переходим на пункт 1 пока начальный элемент не станет конечным
Как именно "меняем местами", "ищем минимальный элемент" и "переходим к следующему" - ищем конкретно для используемой структуры (массив, список, стек). И потом, в C# наверняка уже есть встроенные методы для массива и списка.
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19

Re: Реализация сортировки

Сообщение Medveckij 28 янв 2013, 15:58

AndreyMust19 писал(а):Все очень просто:
0) Начинаем с первого элемента
1) Ищем минимальный элемент между начальным и конечным
2) Меняем его местами с начальным
3) Делаем след. элемент начальным
4) Переходим на пункт 1 пока начальный элемент не станет конечным
Как именно "меняем местами", "ищем минимальный элемент" и "переходим к следующему" - ищем конкретно для используемой структуры (массив, список, стек). И потом, в C# наверняка уже есть встроенные методы для массива и списка.


Да, спасибо. но какие именно вычисления происходят внутри? Лично я пишу лишь сорт и вычисляю ближайший transform, путем сравнивания дистанций двух ближайших объектов. А далее говорю - Абраsortабра, после чего все само собой осуществляется. Not good. хочется знать сколько клапанов у двигателя, а не давить газ в пол.


P.S. Приведенный мною пример скрипта сортировки отлично работает. И метод достаточно понятный. Повторюсь, важно знать вычисления начинки Sort`a.

(2+2) * (2-2) / (2-(-2)) <-- Хочу решение

Seaman сказал, что я неправильно ставлю вопросы. Но сейчас то куда уж правильнее.
Аватара пользователя
Medveckij
Адепт
 
Сообщения: 1014
Зарегистрирован: 10 ноя 2012, 15:44

Re: Реализация сортировки

Сообщение AndreyMust19 28 янв 2013, 16:34

А, понял. В делегате ты возвращаешь оценку (меньше, больше, длинее) сравнения двух элементов, все элементы будут отсортированы по увеличению этой оценки.

List.Sort - тут написано что функция использует алгоритм Array.Sort. А там уже написано что используется алгоритм quicksort. Этот алгоритм можно найти в википедии:
Быстрая сортировка

Все добыто с помощью гугла.
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19

Re: Реализация сортировки

Сообщение AndreyMust19 28 янв 2013, 16:49

А вообще мой любимый алгоритм - выбора (описал 2 поста назад). Работает жутко медленно, но зато никак не зависит от расположения элементов массива, то есть время выполнения зависит только от размера массива. Можно точно вычислить сколько итераций уйдет на сортировку абсолютно любого массива.
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19

Re: Реализация сортировки

Сообщение Medveckij 28 янв 2013, 17:06

Вот, вот теперь огромное спасибо. Помогли так помогли :) A google да, видимо не то и не так искал.
Аватара пользователя
Medveckij
Адепт
 
Сообщения: 1014
Зарегистрирован: 10 ноя 2012, 15:44


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 27