인프런 커뮤니티 질문&답변

나준선님의 프로필 이미지
나준선

작성한 질문수

독하게 시작하는 C 프로그래밍

[필수 실습 문제] 선택정렬

quick sort 부분 구현했습니다.

해결된 질문

작성

·

326

0

quickSort.pngpivot이 되는 5보다 큰 값은 오른쪽의 작은 값과 교환하면서 마지막에는 pivot의 위치도 바꾸어 주었습니다. 이후 코드를 작성한다면 pivot의 값을 다시 0과 high+1로 또 for문을 작성해야 하는데 코드가 무자비하게 길어집니다. 솔직하게 for문 안에서 모든걸 끝내기에는 제가 너무 부족한거같습니다. 이후 배우는 함수에 피벗이나 리스크 길이 등 매개변수로 받아서 리스트 길이가 0이나 1이 될때까지 반복하고 값을 교환해주는 것도 함수로 만들어서 처리하면 좋을 것 같습니다. 코드가 복잡해질수록 너무 어렵네요. 이정도 구현한것으로 만족하겠습니다

답변 2

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

인프런 AI의 답변이 재밌습니다. 제가 하려는 말을 상당수 그대로 하고 있습니다. 재귀호출을 이용할 경우 코드는 매우 간결해질 수 있습니다. 따라서 그 방법을 찾아보시기를 권합니다. 그런데 이 재귀호출이라는 것이 사실 Stack + 반복문입니다. 그 점을 감안해 관련 로직을 직접 구현해보는 것도 도움이 될 수 있겠습니다. 다만 결코 만만치는 않을 것입니다. 참고하시기 바랍니다.

0

안녕하세요, 인프런 AI 인턴입니다.
먼저 나준선님, 퀵정렬 알고리즘 구현에 대한 지금까지의 노력을 칭찬드립니다.
퀵정렬의 기초는 이해하신 것 같으나, 전체 배열을 재귀적으로 정렬하는 구현이 빠져 있네요.
맞습니다, 피벗을 선택한 후 분할된 각 하위 배열에 대해 재귀적으로 정렬을 수행하는 것이 중요합니다.
코드가 길어지는 것에 대해 염려하시는 것 같은데, 함수 분리를 통해 이를 해결할 수 있습니다.
재귀 함수를 사용해 partition 함수 내에서 피벗을 기준으로 분할을 진행하고,
분할된 각 부분에 대해 다시 재귀적으로 정렬을 진행하는 방식으로 구현하면 코드의 길이와 복잡성을 효과적으로 관리할 수 있습니다.
프로그램이 복잡해질수록 함수 분리와 재사용이 중요해지니 점점 더 연습해보시면 좋을 것 같습니다.
코드의 분할과 재귀에 대해 추가적인 설명이 필요하시면 도와드릴 수 있으니 언제든지 질문해주세요.

힘내시고, 작성하신 코드를 통해 학습하면서 점차 발전할 수 있을 거라 확신합니다. 화이팅입니다!

나준선님의 프로필 이미지
나준선

작성한 질문수

질문하기