该子例程的调用方式如下所示:
|
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 位环境中将 qsort64 用于大于 2 GB 的数组。请确保将数组长度 len8 和元素大小 isize8 指定为 INTEGER*8 数据。可使用 Fortran 95 样式的常量显式指定 INTEGER*8 常量。
compar(arg1, arg2) 参数是 array 的元素,它返回以下值:
|
负数 |
如果认为 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
|