안녕하세요
C언어 코드를 디버깅하다보니 막혀서 안풀리는 부분이 있어서 질문드립니다.
먼저 책에나와있는 내용대로 A 배열은 다음과같습니다.
A 80 50 60 20 40
C언어 코드의 왼쪽에 넘버링 기준으로 막히는 부분을 말씀드리면
첫번째 회전
9번 if (a[k] > key)
10번 a[k+1] = a[k];
이부분에서 막히고 있습니다.
이부분을 저는 이렇게 이해하고 있습니다.
" a[k] 가 key 보다 클 경우 a[k] 를 a[k+1] 에 위치하라"
현재 제가 디버깅한 결과에는 key 는 50 이며 a[k] 는 80 이므로 a[k] 가 더 크므로
a[k]를 a[k+1] 에 옮겼습니다.
따라서 A 80 80 60 20 40 으로 배열을 정렬하였습니다.
이부분 부터 문제가 풀리지 않고 있습니다.
현재 key 값인 50 을 A의 첫번째로 옮겨야 하는데 어느 코드부분에서 옮겨줘야 하는지 이해가 잘되지 않습니다.
설명이 잘되었는지 모르겠니다만 도와주시면 감사하겠습니다...ㅠㅠ
안녕하세요.
⑥ for문에서 i는 1부터 시작하므로
⑦ key = a[i];에 의해 key에는 50이 저장됩니다.
⑧ for문에서 k는 i-1부터 시작하므로
k는 0에서 시작합니다.
⑨ if (a[k] > key) a[0]은 80이고 key는 50이므로 조건을 만족합니다.
⑩ a[k+1] = a[k]; a[k+1]은 a[1]이고 a[k]는 a[0]이므로 a[1]에 a[0]의 값인 80을 저장합니다.
이제 배열은 80 80 60 20 40이 되었습니다.
⑧ for문에서 k--로 인해 k가 1 감소하여 -1이 됩니다.
조건을 만족하지 않으므로 for문을 빠져나옵니다.
for문을 빠져 나올 때 k는 -1인 상태입니다.
⑪ a[k+1] = key; k가 -1이므로 a[k+1]은 a[0]입니다.
a[0]에 key인 50이 저장됩니다.
이제 배열은 50 80 60 20 40이 됩니다.
이와 같은 원리로 나머지 과정도 진행해 보세요.
오늘도 즐거운 하루 되세요.
-
*2018-06-15 09:54:09
안녕하세요.
⑥ for문에서 i는 1부터 시작하므로
⑦ key = a[i];에 의해 key에는 50이 저장됩니다.
⑧ for문에서 k는 i-1부터 시작하므로
k는 0에서 시작합니다.
⑨ if (a[k] > key) a[0]은 80이고 key는 50이므로 조건을 만족합니다.
⑩ a[k+1] = a[k]; a[k+1]은 a[1]이고 a[k]는 a[0]이므로 a[1]에 a[0]의 값인 80을 저장합니다.
이제 배열은 80 80 60 20 40이 되었습니다.
⑧ for문에서 k--로 인해 k가 1 감소하여 -1이 됩니다.
조건을 만족하지 않으므로 for문을 빠져나옵니다.
for문을 빠져 나올 때 k는 -1인 상태입니다.
⑪ a[k+1] = key; k가 -1이므로 a[k+1]은 a[0]입니다.
a[0]에 key인 50이 저장됩니다.
이제 배열은 50 80 60 20 40이 됩니다.
이와 같은 원리로 나머지 과정도 진행해 보세요.
오늘도 즐거운 하루 되세요.