可搬用サブルーチン:次元数 1 の配列でクイック・ソートを実行します。
モジュール:USE DFPORT
形式
CALL QSORT (array, len, isize, compar)
array
(入力) すべての型。ソートする 1 次元配列。
データ型が QSORT の既定のインタフェースの 1 つと確認できない場合,新しいインタフェースを作成しなければなりません (以下を参照)。
len
(入力) INTEGER(4)。array の要素数。
isize
(入力) INTEGER(4)。array の 1 要素の大きさ (バイト)。
array が REAL(4) 型であれば 4
array が REAL(8) または複素数型であれば 8
array が COMPLEX(8) 型であれば 16
compar
(入力) INTEGER(2)。ソート順を決定するユーザー定義ソート順関数の名前。compar の型宣言は,以下の形式を取ります。
INTEGER(2) FUNCTION compar(arg1, arg2)
ここで,arg1 と arg2 は array と同じ型を持ちます。一度,ソート順案を作成すると,以下を返すようにソート関数を実装します。
arg1 が arg2 よりも前にある場合は負。
arg1 が arg2 と等しい場合はゼロ。
arg1 が arg2 よりも後ろにある場合は正。
仮引数 compar は EXTERNAL として宣言しなければなりません。
QSORT を異なるデータ型で使用する場合,すべての呼び出しが正しく動作するために,プログラムは USE DFPORT 文を宣言しなければなりません。さらに,構造型または既定のインタフェースにない型で QSORT を使用する場合,総称サブルーチン QSORT のオーバーロードを含めなければなりません。これを行う方法を示した例は,可搬用モジュールのソース・ファイル DFPORT.F90 (\DF98\INCLUDE サブディレクトリ) を参照してください。
互換性
CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB
例
PROGRAM SORTQ USE DFPORT integer(2), external :: cmp_function integer(2) insort(26), i integer (4) array_len, array_size array_len = 26 array_size = 2 do i=90,65,-1 insort(i-64)=91 - i end do print *, "Before: " print *,insort CALL qsort(insort,array_len,array_size,cmp_function) print *, 'After: ' print *, insort END ! integer(2) function cmp_function(a1, a2) integer(2) a1, a2 cmp_function=a1-a2 end function