선택 정렬

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로 저장

소스 컴파일 및 프로그램 테스트



+ Recent posts