선택 정렬
PROGRAM Main
IMPLICIT NONE
REAL, DIMENSION(:), ALLOCATABLE :: FailureTime
INTEGER :: NumTimes, I, OpenStatus, InputStatus
CHARACTER(20) :: FileName
WRITE (*, '(1X, A)', ADVANCE = "NO") "자료 파일 이름(20자 이내)을 입력하시오 : "
READ *, FileName
OPEN (UNIT = 15, FILE = FileName, STATUS = "OLD", IOSTAT = OpenStatus)
IF (OpenStatus > 0) THEN
STOP "*** 파일을 열 수 없음 ***"
END IF
NumTimes = 0
DO
READ (UNIT = 15, FMT = *, IOSTAT = InputStatus)
IF (InputStatus > 0) THEN
STOP "*** 입력 에러 ***" ! 프로그램 종료하기
END IF
IF (InputStatus < 0) THEN
EXIT ! DO 루프 빠져나가
END IF
NumTimes = NumTimes + 1
END DO
REWIND(UNIT = 15)
ALLOCATE(FailureTime(NumTimes))
DO I = 1, NumTimes
READ (UNIT = 15, FMT = *, IOSTAT = InputStatus) FailureTime(I)
IF (InputStatus > 0) THEN
STOP "*** 입력 에러 ***" ! 프로그램 종료하기
END IF
IF (InputStatus < 0) THEN
EXIT ! DO 루프 빠져나가
END IF
END DO
CLOSE(15)
PRINT *, "Sorting ..."
CALL SelectionSort(FailureTime)
PRINT *, FailureTime
CONTAINS
SUBROUTINE SelectionSort(Item)
REAL, DIMENSION(:), INTENT(INOUT) :: Item
REAL :: SmallestItem
INTEGER :: SmallestLoc, NumItems, I
INTEGER, DIMENSION(1) :: MinLoc_arr
NumItems = SIZE(Item)
DO I = 1, NumItems - 1
SmallestItem = MINVAL(Item(I:NumItems))
MinLoc_arr = MINLOC(Item(I:NumItems))
SmallestLoc = (I - 1) + MinLoc_arr(1)
Item(SmallestLoc) = Item(I)
Item(I) = SmallestItem
END DO
END SUBROUTINE
END PROGRAM Main
위 소스를 08_05_SelSort.f95로 저장
데이터
99.5
133.8
84.2
217.5
188.8
103.1
93.9
165.0
68.3
111.
88.8
88.2
90.1
70.2
150.5
122.9
138.8
99.9
111.6
155.7
133.4
122.2
93.4
101.5
109.9
103.3
177.7
188.1
99.8
144.4
87.5
79.3
190.2
190.3
170.1
160.9
121.1
95.6
140.5
177.2
150.1
140.3
139.2
113.8
155.9
144.4
88.3
83.5
101.1
112.8
위 데이터를 08_01_Failure.dat로 저장
소스 컴파일 및 프로그램 테스트
'Programming > Fortran' 카테고리의 다른 글
빈도구하기 (0) | 2008.09.25 |
---|---|
신속정렬(Quick Sort) (0) | 2008.09.22 |
평균 이상의 고장 시간 출력(파일의 행수를 알아내기) (0) | 2008.09.17 |
배열 스왑(자동 할당 배열) (1) | 2008.09.17 |
평균 계산(Assumed-Shape Array, 형상가정 배열 사용) (0) | 2008.09.17 |