1
2 PROGRAM test_select_sort
3 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4 ! Purpose: To test the subroutine or function select_sort !
5 ! Record of revisions: !
6 ! Date Programer Description of changes !
7 ! ========== ========== ================================= !
8 ! 2011.3.18 Joshua Original !
9 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
10 !Data dictionary
11 INTEGER,PARAMETER::N=180
12 REAL,DIMENSION(N)::array=&
13 (/-10,1,2,34,5,5,678,345,90, 567,34,23,7,8,2,5,4,9 &
14 ,-10,1,2,34,5,5,678,345,90, 567,34,23,7,8,2,5,4,9 &
15 ,-10,1,2,34,5,5,678,345,90, 567,34,23,7,8,2,5,4,9 &
16 ,-10,1,2,34,5,5,678,345,90, 567,34,23,7,8,2,5,4,9 &
17 ,-10,1,2,34,5,5,678,345,90, 567,34,23,7,8,2,5,4,9 &
18 ,-10,1,2,34,5,5,678,345,90, 567,34,23,7,8,2,5,4,9 &
19 ,-10,1,2,34,5,5,678,345,90, 567,34,23,7,8,2,5,4,9 &
20 ,-10,1,2,34,5,5,678,345,90, 567,34,23,7,8,2,5,4,9 &
21 ,-10,1,2,34,5,5,678,345,90, 567,34,23,7,8,2,5,4,9 &
22 ,-10,1,2,34,5,5,678,345,90, 567,34,23,7,8,2,5,4,9/)
23
24 REAL::time_start, time_end
25 !
26 INTERFACE
27 SUBROUTINE select_sort(array, n, c)
28 IMPLICIT NONE
29 INTEGER, INTENT(IN)::n
30 REAL, DIMENSION(n),INTENT(INOUT)::array
31 CHARACTER,INTENT(IN)::c
32 END SUBROUTINE select_sort
33 END INTERFACE
34
35 CALL CPU_TIME(time_start)
36 !$OMP PARALLEL
37 !$OMP DO
38 DO i=1,1000000
39 ! WRITE(*,*) i
40 CALL select_sort(array,N, 'd')
41 END DO
42 !$OMP END DO
43 !$OMP END PARALLEL
44 CALL CPU_TIME(time_end)
45 WRITE(*,*) 'Elapsed time is',time_end-time_start, 'seconds'
46 END PROGRAM test_select_sort
1 SUBROUTINE select_sort(array,n,c)
2 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3 ! Purpose: To sort the input data array into ascending/descending order. !
4 ! Record of revisions: !
5 ! Date Programer Description of changes !
6 ! ========== ========== ================================= !
7 ! 2011.3.18 Joshua Original, sort subroutine !
8 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
9 IMPLICIT NONE
10 ! Data dict
11 INTEGER,INTENT(IN)::n ! number of values
12 REAL,DIMENSION(n),INTENT(INOUT)::array ! array to be sorted
13 CHARACTER,INTENT(IN)::c ! c=='a'->ascending sort
14 ! c=='d'->descending sort
15 ! local data
16 INTEGER::i, j, iptr;
17 REAL::temp
18 outer: DO i=n,2,-1
19 inner: DO j=1,n-1
20 IF(array(j)>array(j+1)) THEN
21 temp=array(j)
22 array(j)=array(j+1)
23 array(j+1)=temp
24 END IF
25 END DO inner
26 END DO outer
27
28 SELECT CASE (c)
29 CASE ('d')
30 DO i=1,n/2
31 temp=array(i)
32 array(i)=array(n-i+1)
33 array(n-i+1)=temp
34 END DO
35 CASE('a')
36 CASE DEFAULT
37
38 END SELECT
39 END SUBROUTINE select_sort
编译命令 ifort -openmp test_select_sort select_sort -o mp