среда, 7 мая 2008 г.

Сортировка

В процессе трансформации популяции необходимо отсортировать элементы популяции по качеству. В качестве результата мы имеем индексы отсортированные по возрастанию качества.

 // Код на SciLab

function [gi,bi] = sort_pop(kach)
[s,ind] = sort(kach) ;
gi = ind(1:($/2)) ;
bi = ind(($/2+1):$) ;
endfunction


 // Код на C

void inline sort_pop(int pop_cnt,
int *pop_ind,
double *pop_kach)
{
int k,p,ind, pc1 ;
int *pi ;
pi = pop_ind ;

for( p=0 ; p<pop_cnt ; p++,pi++ )
*pi = p ;

pc1 = pop_cnt - 1 ;
for( p=0 ; p<pc1 ; p++ )
for( k=0 ; k<pc1 ; k++ )
#define IND(k) (pop_ind[k])
#define VAL(k) (pop_kach[IND(k)])
if(VAL(k)>VAL(k+1))
{
ind = IND(k+1) ;
IND(k+1) = IND(k) ;
IND(k) = ind ;
}
#undef IND
#undef VAL
}