31강 버블정렬 강의 입니다.
C언어 중
큰 do ~ while 문에서
while (j<8-i) 라고 하셨는데
while (j<9-i) 9가 아니고 왜 8이 되는지 답변 부탁 드립니다.ㅠㅠ
안녕하세요.
C나 JAVA는 배열의 위치가 무조건 0부터 시작합니다.
이와 달리 순서도는 배열의 위치가 0부터 시작할 수도 있고 1부터 시작할 수도 있습니다.
그러므로 실제 시험에서는 순서도에 배열이 사용된 경우 처리조건에 배열의 시작 위치가 제시될 수 있으며, 혹 제시되지 않는 경우 배열의 위치에 사용되는 변수의 초기값을 보고 판단하면 됩니다.
C코드에서
i가 0일 때, 즉 1회전에서는
j는 0부터 8-i, 즉 8까지 비교합니다.
다시말해
j가 0일 때는
data[0]일 때 data[1]과
j가 1일 때는
data[1]일 때 data[2]와
.
.
j가 7일 때는
data[7]일 때 data[8]과
j가 8일 때는
data[8]일 때 data[9]와 비교합니다.
data 배열은 data[0]부터 data[9]까지 10개이므로 8-i까지 비교하면 각 회전때마다 맞게 비교됩니다.
하나만 더 살펴볼까요.
i가 1일 때, 즉 2회전에서는
j는 0부터 8-i, 즉 7까지 비교합니다. 마지막 data[9]에는 1차 정렬된 값이 저장되므로 2회전에서는 data[8]까지만 비교하면 됩니다.
그래서
j가 0일 때
data[0]과 data[1]을
j가 7일 때
data[7]과 data[8]을 비교하게 됩니다.
그리고 i는 회전수를 의미합니다. 회전은 데이터가 총 10개라면 9번만 하면 됩니다.
i도 0부터 시작이므로
i는 0일 때 1회전을 하고 비교합니다. i < 8인지 Yes이므로 계속 진행합니다.
i는 1일 때 2회전을 하고 비교합니다. i < 8인지 Yes이므로 계속 진행합니다.
i는 2일 때 3회전을 하고 비교합니다. i < 8인지 Yes이므로 계속 진행합니다.
i는 3일 때 4회전을 하고 비교합니다. i < 8인지 Yes이므로 계속 진행합니다.
.
.
i는 6일 때 7회전을 하고 비교합니다. i < 8인지 Yes이므로 계속 진행합니다.
i는 7일 때 8회전을 하고 비교합니다. i < 8인지 Yes이므로 계속 진행합니다.
i는 8일 때 9회전을 하고 비교합니다. i < 8인지 No이므로 수행을 중지합니다.
결국 i < 8일 때까지 수행하면 9회전을 하게 됩니다.
C언어는 배열의 위치가 0부터 시작하기 때문에 이런 차이가 발생함을 염두에 두고 학습하세요.
종료 기준값을 확인할 때는 반드시 디버깅을 직접 수행한 후 판단을 해야 합니다.
디버깅 없이 눈으로만 확인할 경우 맞는 것 같아 실수하는 경우과 많기 때문입니다. 이점 학습에 꼭 참고하세요.
오늘도 즐거운 하루 되세요.
-
*2018-07-09 09:23:33
안녕하세요.
C나 JAVA는 배열의 위치가 무조건 0부터 시작합니다.
이와 달리 순서도는 배열의 위치가 0부터 시작할 수도 있고 1부터 시작할 수도 있습니다.
그러므로 실제 시험에서는 순서도에 배열이 사용된 경우 처리조건에 배열의 시작 위치가 제시될 수 있으며, 혹 제시되지 않는 경우 배열의 위치에 사용되는 변수의 초기값을 보고 판단하면 됩니다.
C코드에서
i가 0일 때, 즉 1회전에서는
j는 0부터 8-i, 즉 8까지 비교합니다.
다시말해
j가 0일 때는
data[0]일 때 data[1]과
j가 1일 때는
data[1]일 때 data[2]와
.
.
j가 7일 때는
data[7]일 때 data[8]과
j가 8일 때는
data[8]일 때 data[9]와 비교합니다.
data 배열은 data[0]부터 data[9]까지 10개이므로 8-i까지 비교하면 각 회전때마다 맞게 비교됩니다.
하나만 더 살펴볼까요.
i가 1일 때, 즉 2회전에서는
j는 0부터 8-i, 즉 7까지 비교합니다. 마지막 data[9]에는 1차 정렬된 값이 저장되므로 2회전에서는 data[8]까지만 비교하면 됩니다.
그래서
j가 0일 때
data[0]과 data[1]을
j가 7일 때
data[7]과 data[8]을 비교하게 됩니다.
그리고 i는 회전수를 의미합니다. 회전은 데이터가 총 10개라면 9번만 하면 됩니다.
i도 0부터 시작이므로
i는 0일 때 1회전을 하고 비교합니다. i < 8인지 Yes이므로 계속 진행합니다.
i는 1일 때 2회전을 하고 비교합니다. i < 8인지 Yes이므로 계속 진행합니다.
i는 2일 때 3회전을 하고 비교합니다. i < 8인지 Yes이므로 계속 진행합니다.
i는 3일 때 4회전을 하고 비교합니다. i < 8인지 Yes이므로 계속 진행합니다.
.
.
i는 6일 때 7회전을 하고 비교합니다. i < 8인지 Yes이므로 계속 진행합니다.
i는 7일 때 8회전을 하고 비교합니다. i < 8인지 Yes이므로 계속 진행합니다.
i는 8일 때 9회전을 하고 비교합니다. i < 8인지 No이므로 수행을 중지합니다.
결국 i < 8일 때까지 수행하면 9회전을 하게 됩니다.
C언어는 배열의 위치가 0부터 시작하기 때문에 이런 차이가 발생함을 염두에 두고 학습하세요.
종료 기준값을 확인할 때는 반드시 디버깅을 직접 수행한 후 판단을 해야 합니다.
디버깅 없이 눈으로만 확인할 경우 맞는 것 같아 실수하는 경우과 많기 때문입니다. 이점 학습에 꼭 참고하세요.
오늘도 즐거운 하루 되세요.