该子例程的调用方式如下所示:
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 |