Сортировка массива пузырьком

a=#(2,5,1,8,4,5,7)
for i=a.count to 1 by -1 do
for j=1 to a.count while j<i do
if (a[j] > a[j+1]) do
(
tmp = a[j]
a[j] = a[j+1]
a[j+1] = tmp
)
a
Но этот метод сортировки очень медленно работает!
В десятки раз быстрее работает
 
arr = for i = 1 to 10 collect
(
id_1 = random 1 100
id_2 = random 1 100
p3 = random [-100,-100,-100] [100,100,100]
#(id_1, id_2, p3)
)
 
fn compareFN v1 v2 pos: =
(
local d = (distance v1[3] pos) - (distance v2[3] pos)
case of
(
(d<0.): -1
(d>0.): 1
default: 0
)
)
qsort arr compareFN pos:[100,0,0]

Примерно это же описано в справке maxscript

_______________________________________________________________
































Пример фильтра нескольких объектов по признаку.

findItem (for i=1 to selection.count collect superClassOf selection[i] == shape) false == 0

-- За скобками: найти значение false в массиве, который получится циклом в скобках, сравнить результат поиска с нулём (то есть значение false ищем и не находим если результат поиска есть ноль.), тем самым удостоверяемся что внутри все значения true и проверку все прошли.
Теперь что происходит в скобках: Для каждого элемента i начиная с первого до числа выделенных объектов собрать в массив результаты сравнений каждого элемента по признаку суперкласса, который есть или не есть шэйп. Результатами сравнений получаются как раз булевые значения true/false, которые потом ищем файндитемом.

_______________________________________________________________


Передаём функции переменную

fn createSphere rad wc:(color 0 0 0) = (
Sphere radius:rad wirecolor:wc
)
createSphere 40
createSphere 40 wc: (color 0 200 200)
/*Здесь надо обратить внимание на параметр wc, передаваемый функции в строке объявления функции.*/

_______________________________________________________________







Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: