2017-02-21 9 views
0

У меня есть массив из 50 миллионов Vector3, хранящихся в массиве с плавающей точкой из трех. Я могу преобразовать в и из массива типа Vector3.Как отсортировать массивы позиций Vector3 слева направо?

Я хочу сортировать массив от низкого до высокого в C# по оси Y. Было бы неплохо иметь быстрый и эффективный процесс. Я не могу найти какие-либо конкретные процедуры для такого рода задач, не хватает ли некоторых ключевых слов для поиска? Должен ли я писать рутину, есть ли готовая составляющая?

Любая информация была бы очень оценена. Благодарю.

+1

Просто сортировать массив, используя собственный компаратор, сравнивающий по оси Y. встроенная функция 'Array.Sort' уже довольно быстро. Кроме того, возможно ли вставлять данные в массив предварительно отсортированным способом, выполняя некоторую предварительную обработку на любом источнике данных? –

+0

Привет, Данные от линейных сканов пространственной информации в X Y Z направлениях пространства, которые содержат довольно случайные данные, мне нужно немного переупорядочить его, чтобы анализировать его быстрее. когда я программировал синтезаторы, у нас были амплитудные сортировки, называемые пузырьковой сортировкой и т. д., я попробую несколько поисковых терминов, чтобы найти какой-то пользовательский код сортировки. –

+0

Я предлагаю вам попробовать простой [Array.Sort (Array, IComparer)] (https://msdn.microsoft.com/en-us/library/aw9s5t8f (v = vs.110) .aspx) и ser, если производительность достаточно хороша. –

ответ

0

решаемого это, используя версию массива математического метода цифровой сортировки:

Если значения массива являются дискретными или могут быть округлены до менее миллиона различных значений, это может быть сделано в секунде в течение 10 миллионов значений массивов ,

пример для сортировки Z из Vector3, он переписывает вершинные и обычные массивы, следовательно, 6 записей переопределения:

function Zsort():IEnumerator{ 
yield WaitForFixedUpdate(); 


     var countarr : int[] = new int[3000] ;  
     var loi = 0 ; 
     var hii = 0 ; print("z1sort"); WaitForFixedUpdate() ; 
    for (var i : int = 0; i < sortarr.Length ; i++) 
    { 
     sortarr [ i ] = 0; //Init sort arrays with zeros 
     stepsarr[ i ] = 0; //increment beginning of next section 
     countarr[ i ] = 0; //used for keeping track of where to write into section for every int 
    }print("z2sort"); WaitForFixedUpdate() ; 
    for ( i = 0; i < v1.Length-3 ; i+=3) 
    { 
     sortarr[ v1[i+2] ] += 1; // write all positions to sort arrays 
    }print("z3sort"); WaitForFixedUpdate() ; 
    var indexcount = 0;//used to accumulate index position 0,10,20,30 if all vals have 10 dupes 
    for ( i = 0; i < sortarr.Length ; i++)// 
    { 
     stepsarr[ i ] = indexcount; // write staircase section start positions 
     indexcount += sortarr [ i ]; 
    } print("z4sort"); WaitForFixedUpdate() ; 
    for ( i = 0; i < v1.Length-3 ; i+=3) 
    { 
     v2[ stepsarr[ v1[i+2] ]*3 + countarr[ v1[i+2] ]*3 ] = v1[i ];  
     v2[ stepsarr[ v1[i+2] ]*3 + countarr[ v1[i+2] ]*3+1 ] = v1[i+1]; 
     v2[ stepsarr[ v1[i+2] ]*3 + countarr[ v1[i+2] ]*3+2 ] = v1[i+2]; 
     n2[ stepsarr[ v1[i+2] ]*3 + countarr[ v1[i+2] ]*3 ] = n1[i ];  
     n2[ stepsarr[ v1[i+2] ]*3 + countarr[ v1[i+2] ]*3+1 ] = n1[i+1]; 
     n2[ stepsarr[ v1[i+2] ]*3 + countarr[ v1[i+2] ]*3+2 ] = n1[i+2]; 

     countarr[ v1[i+2] ] += 1 ; 
    } print("z5sort"); WaitForFixedUpdate() ; 
    for ( i = 0; i < v1.Length ; i+=1) 
    { 
     v1[ i ] = v2[ i ]; 
     n1[ i ] = n2[ i ]; 
    } print("z6sort"); WaitForFixedUpdate() ; 


} 
Смежные вопросы