サブルーチンは、次のように呼び出します。
|
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
|