Sun Studio 12:Fortran 库参考

1.4.39 qsort 和 qsort64:对一维数组的元素排序

该子例程的调用方式如下所示:

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 前面

零 

如果 arg1arg2 的位置相同

正数 

如果认为 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