프로그래밍의 기초(의사 코드 트레이스)
다음 프로시저 bubble은 정수형 배열 data를 오름차순으로 정렬하는 버블 정렬이다. swap(data, j, k)는 data[j]와 data[k]의 값을 교환하는 프로시저이며, 배열의 인덱스는 1부터 시작한다. 프로그램 중의 【a】에 들어갈 것은?
○bubble(integer array: data)
integer: n ← length(data)
for (i from n down to 2 step 1)
for (j from 1 to 【a】 step 1)
if (data[j] > data[j + 1])
swap(data, j, j + 1)
endif
endfor
endfor
- Ai
- Bn − i
- Ci − 1
정답과 해설 보기
정답: C. i − 1
바깥쪽 i는 그 회차의 주사에서 최댓값을 보내 넣을 위치(끝에서부터 n, n − 1, …, 2)를 나타냅니다. 안쪽에서는 data[j]와 data[j + 1]을 비교하므로, j의 종료값을 i − 1로 하면 data[i]까지의 이웃끼리를 비교하며 배열의 범위를 넘지 않습니다. i = n인 1회차에서 최댓값이 data[n]으로 옮겨지고, 다음은 data[n − 1]까지라는 식으로 주사하는 범위가 하나씩 좁아집니다. 【a】를 i로 하면 1회차에 data[n + 1]을 참조해 버립니다.