책 내용 질문하기
삽입정렬 질문드립니다
도서
2018 시나공 정보처리기사 실기(산업기사 포함)
페이지
289
조회수
46
작성일
2018-06-14
작성자
탈퇴*원
첨부파일

안녕하세요

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의 첫번째로 옮겨야 하는데 어느 코드부분에서 옮겨줘야 하는지 이해가 잘되지 않습니다.

설명이 잘되었는지 모르겠니다만 도와주시면 감사하겠습니다...ㅠㅠ

답변
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이 됩니다.

이와 같은 원리로 나머지 과정도 진행해 보세요.

오늘도 즐거운 하루 되세요.

  • *
    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이 됩니다.

    이와 같은 원리로 나머지 과정도 진행해 보세요.

    오늘도 즐거운 하루 되세요.

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.