09/01/17 10:58:03
>>132
ごめんなさい。一部誤りがありました。以下のように修正させて下さい。(修正しても結果はソートされませんでしたが。。)
for(p=0; p<nlocal; p++) {
for(q=0; q<nlocal; q++) {
if(array[p]>temp_array[q]) {
array[p]=array[p]^temp_array[q]; //array[q]をtemp_array[q]に変更
array[q]=array[p]^temp_array[q]; //array[q]をtemp_array[q]に変更
array[p]=array[p]^temp_array[q]; //array[q]をtemp_array[q]に変更
}
}
}
この意味するところは、
int dummy;
for(p=0; p<nlocal; p++) {
for(q=0; q<nlocal; q++) {
if(array[p]>temp_array[q]) {
dummy=array[p];
array[p]=temp_array[q];
temp_array[q]=dummy;
}
}
}
と同一のつもりです。使って良いメモリはプロセスあたりnlocal*2ですので。。
つまり、arrayとtemp_arrayの配列を比較し、arrayに小さい半分の(nlocal個の)整数を格納し、temp_arrayに大きい半分の(nlocal個の)整数を格納したつもりです。