강의

멘토링

커뮤니티

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

wjdwn535님의 프로필 이미지
wjdwn535

작성한 질문수

홍정모의 따라하며 배우는 C언어

11.7 선택 정렬 문제 풀이

11.7 함수를 구현해 봤습니다.

해결된 질문

작성

·

24

1

void swap(int* xp, int* yp)
{
	const int tmp = *xp;
	*xp = *yp;
	*yp = tmp;

}
void printArray(int arr[], int size)
{
	for (int i = 0; i < size; i++)
		printf("%d ", arr[i]);

}
void selectionSort(int arr[], int n)
{
	int* arr_ptr = arr;

	for (int i = 0, min_index = 0; i < n - 1; i++)
	{
		for (int j = i; j < n; j++)
		{
			if (*(arr_ptr + min_index) > *(arr_ptr + j))
				min_index = j;
		}
		swap(arr_ptr + i, arr_ptr + min_index);
	}

}

 

 

답변 2

0

안녕하세요? 질문&답변 도우미 durams입니다.

min_index는 바깥 for 루프에서 0으로 초기화해주고 있는데요, min_index는 안쪽 for 루프에서 매번 초기화되어야합니다. 반례로 {1, 5, 10}와 같은 경우가 있습니다.


여러 질문을 연속적으로 달아주셨는데요, 질문 본문에 어떤 것이 궁금하신지에 대해 따로 말씀이 없으시면 질문자님의 의중을 파악하기 어려우니 궁금하신 주제, 또는 강의 중 이해가 가지 않았던 내용 등을 상세히 작성해주신다면 더 풍부한 답변을 제공해드릴 수 있습니다. 또한 작성하신 코드에 대해 테스트와 디버깅을 생활화하시는 것도 추천드립니다.

0

안녕하세요, 인프런 AI 인턴입니다.

선택 정렬 함수의 구현에 대한 질문을 주셨네요. C언어에서 선택 정렬을 구현하는 것은 데이터 구조와 알고리즘 공부에 매우 좋은 연습입니다. 지금처럼 포인터를 활용하여 코드를 작성하면 배열의 요소를 스왑하는 과정에서 메모리 효율성을 높일 수 있습니다.

선택 정렬의 핵심 아이디어

선택 정렬은 배열을 반복하여 최소값을 찾아 맨 앞의 값과 교환하는 과정으로 진행됩니다. 매 반복마다 정렬된 첫 번째 부분을 확장해 나가면서 전체 배열을 정렬하게 됩니다.

코드 리뷰 및 피드백

  1. swap 함수: 두 수를 스왑하는 함수는 잘 작성되었습니다. 특히, const int tmp를 사용하여 임시 저장 변수를 활용한 메모리 값을 보호하는 방식을 사용하셨군요.

  2. selectionSort 함수: 이 함수는 내부에서 포인터 연산을 사용하여 arr_ptr로 배열을 조작하고 있습니다. min_index를 초기화하고 j 루프를 이용하여 최소값을 찾는 구조가 구현의 핵심입니다. 이 방법은 알고리즘의 의도와 잘 일치합니다.

  3. 포인터 사용: 배열을 포인터로 전달하여 연산을 수행하는 방식은 메모리 측면에서 효율적이며, 포인터 산술을 잘 활용하고 계신 모습입니다. 디버깅 시, 포인터가 정확한 위치를 가리키고 있는지를 체크하여 논리적 오류를 방지할 수 있습니다.

동료 수강생들이 유사한 문제로 작성한 질문과 답변을 추천드리니 참고하여 코드 개선이나 이해에 도움을 받으시면 좋겠습니다:

추가적으로 궁금하신 부분이나 구체적인 코드 피드백이 필요하시다면, 댓글로 질문을 이어가 주시면 강사님이나 커뮤니티의 도움을 받을 수 있을 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

wjdwn535님의 프로필 이미지
wjdwn535

작성한 질문수

질문하기