サブルーチンは、次のように呼び出します。
call qsort( array, len, isize, compar ) call qsort64( array, len8, isize8, compar ) |
|||
array |
array |
入力 |
ソートする要素が入っている配列 |
len |
INTEGER*4 |
入力 |
配列内の要素の個数 |
len8 |
INTEGER*8 |
入力 |
配列内の要素の個数 |
isize |
INTEGER*4 |
入力 |
要素のサイズ : 4= 整数または実数 8= 倍精度または複素数 16= 倍精度複素数 文字配列の場合は文字オブジェクトの長さ |
isize8 |
INTEGER*8 |
入力 |
要素のサイズ : 4_8= 整数または実数 8_8= 倍精度または複素数 16_8= 倍精度複素数 文字配列の場合は文字オブジェクトの長さ |
compar |
関数名 |
入力 |
ユーザーが提供する INTEGER*2 型の関数の名前。 ソート順を決定する: compar(arg1,arg2) |
64 ビット環境においては、2 G バイトを超える配列には qsort64 を使用します。この場合、INTEGER*8 データとして、配列の長さは len8、要素サイズは isize8 に必ず指定してください。Fortran 95 型の定数を使用して INTEGER*8 定数を明示的に指定します。
compar の引数である arg1 と arg2 は、配列の要素であり、次の結果を返します。
負数 |
arg1 は arg2 の前に置かれると見なされる場合 |
ゼロ |
arg1 と arg2 が等しい場合 |
正数 |
arg1 は arg2 のあとに置かれると見なされる場合 |
例:
demo% cat tqsort.f external compar integer*2 compar INTEGER*4 array(10)/5,1,9,0,8,7,3,4,6,2/,len/10/, 1 isize/4/ call qsort( array, len, isize, compar ) write(*,'(10i3)') array end integer*2 function compar( a, b ) INTEGER*4 a, b if ( a .lt. b ) compar = -1 if ( a .eq. b ) compar = 0 if ( a .gt. b ) compar = 1 return end demo% f95 tqsort.f demo% a.out 0 1 2 3 4 5 6 7 8 9 |