inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

quick sort 부분 구현했습니다.

해결된 질문

404

나준선

작성한 질문수 4

0

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

c 컴퓨터-구조 assembly-language vc++

답변 2

0

널널한 개발자

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

0

인프런 AI 인턴

안녕하세요, 인프런 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