quick sort 부분 구현했습니다.
pivot이 되는 5보다 큰 값은 오른쪽의 작은 값과 교환하면서 마지막에는 pivot의 위치도 바꾸어 주었습니다. 이후 코드를 작성한다면 pivot의 값을 다시 0과 high+1로 또 for문을 작성해야 하는데 코드가 무자비하게 길어집니다. 솔직하게 for문 안에서 모든걸 끝내기에는 제가 너무 부족한거같습니다. 이후 배우는 함수에 피벗이나 리스크 길이 등 매개변수로 받아서 리스트 길이가 0이나 1이 될때까지 반복하고 값을 교환해주는 것도 함수로 만들어서 처리하면 좋을 것 같습니다. 코드가 복잡해질수록 너무 어렵네요. 이정도 구현한것으로 만족하겠습니다
답변 2
0
인프런 AI의 답변이 재밌습니다. 제가 하려는 말을 상당수 그대로 하고 있습니다. 재귀호출을 이용할 경우 코드는 매우 간결해질 수 있습니다. 따라서 그 방법을 찾아보시기를 권합니다. 그런데 이 재귀호출이라는 것이 사실 Stack + 반복문입니다. 그 점을 감안해 관련 로직을 직접 구현해보는 것도 도움이 될 수 있겠습니다. 다만 결코 만만치는 않을 것입니다. 참고하시기 바랍니다.
0
안녕하세요, 인프런 AI 인턴입니다.
먼저 나준선님, 퀵정렬 알고리즘 구현에 대한 지금까지의 노력을 칭찬드립니다.
퀵정렬의 기초는 이해하신 것 같으나, 전체 배열을 재귀적으로 정렬하는 구현이 빠져 있네요.
맞습니다, 피벗을 선택한 후 분할된 각 하위 배열에 대해 재귀적으로 정렬을 수행하는 것이 중요합니다.
코드가 길어지는 것에 대해 염려하시는 것 같은데, 함수 분리를 통해 이를 해결할 수 있습니다.
재귀 함수를 사용해 partition 함수 내에서 피벗을 기준으로 분할을 진행하고,
분할된 각 부분에 대해 다시 재귀적으로 정렬을 진행하는 방식으로 구현하면 코드의 길이와 복잡성을 효과적으로 관리할 수 있습니다.
프로그램이 복잡해질수록 함수 분리와 재사용이 중요해지니 점점 더 연습해보시면 좋을 것 같습니다.
코드의 분할과 재귀에 대해 추가적인 설명이 필요하시면 도와드릴 수 있으니 언제든지 질문해주세요.
힘내시고, 작성하신 코드를 통해 학습하면서 점차 발전할 수 있을 거라 확신합니다. 화이팅입니다!
scanf("%d\n") 의미
0
19
1
주소 연산자(&) 간접 지정자(*) 반대 개념
0
32
1
Virtual Memory, Memory, Memory mapping tables
0
50
1
샘플코드 출력 오류 발생 질문드립니다
0
62
2
값의 교환에 사용되는 변수의 위치.
0
87
2
메모리 비교에 관한 질문
0
80
2
문자열 Null
0
62
1
C, C++
0
87
2
문자열 입출력 코드 에러
0
60
2
선생님! 120화 2분 50초 질문입니다.
0
66
1
caller 가 메모리 할당 해제를 할 때의 문제점 질문
0
63
2
단축키 맞는지 여부 문의드립니다.
0
59
2
문자열을 사용하는 이중 포인터에 대하여 질문합니다
0
65
1
char 포인터 변수의 크기에 대하여 제가 이해한 것이 맞을까요
0
78
2
용어 설명 필요
0
56
2
stdin, stdout
0
70
2
필수 실습 (최댓값을 반환하는 함수)
0
92
2
아......ㅠㅠ
0
99
2
버퍼 내 엔터
0
71
1
2진수 뺄셈에서 carry-out
0
111
2
union 식별자는 실무에서 보통 어디에서 사용하나요?
0
79
2
필수실습문제 공부법 (진도 vs 복습)
0
103
2
예제파일 다운로드
0
78
2
Visial Studio Code 를 설치해서 사용해도 수업을 따라가는데 지장이 있나요?
0
118
3





