카테고리 없음

[홍정모의 따배씨] 선택 정렬 알고리즘 후기

newbeverse 2024. 6. 4. 23:06

홍정모 교수님이 내주신 문제는 선택정렬 알고리즘이다.

오름차순으로 숫자를 정렬하는게 목적이고, 코드는 아래와 같다.

결론적으로 문제풀이에 성공해서 정말 뿌듯하다.

다만 교수님과 다른 부분이였고, 이제와서 보이게 된건

배열의 원소가 5개면 배열은 arr[4] 까지이다.

arr[0] = 1; arr[1] = 2 arr[2] = 3 arr[3] = 3 arr[4] = 4

그러나 배열의 끝을 알리기위해 '\0' 문자열이 들어가므로,

arr[0] = 1; arr[1] = 2 arr[2] = 3 arr[3] = 3 arr[4] = 4  arr[5] = '\0' 이된다.

아주 기초중에 기초상식이니 헷갈린다면 꼭 다시 공부해보자  

실제로 배얼 arr[] 의 크기는 0~4 총 4개이다.

다음은 주소 표현법이다.

int arr[] 에서 arr[] = &arr[0] 이다.

arr[] 자체가 주소임라는 것은 알고있던 사실인데도 불구하고, int *arr[] 이아닌, int arr[] 이라는 사실이 헷갈리게 만든다.

이 chatgpt의 답변을 이해하면 이유가 명쾌하게 이해가 된다.

int arr[] 의 예
int arr[] = {1, 2, 3, 4, 5};

int* arr[] 의 예 
int a = 1, b = 2, c = 3;
int *arr[] = {&a, &b, &c}; // Array of pointers to integers
int size = sizeof(arr) / sizeof(arr[0]);

 

	#include <stdio.h>

void swap(int* xp, int* yp);
void printArray(int arr[], int size);
void selectionSort(int arr[], int n);

int main(void)
{
	int arr[] = { 65,0 ,323,3,32,3,3,32,24, 12, 22, 11, 232};
	int n = sizeof(arr) / sizeof(arr[0]);

	selectionSort(arr, n);
	printArray(arr, n);

	return 1;
}

void selectionSort(int arr[], int n)
{
	int max_idx = *arr;
	for (int i = 0; i < n; i++)
	{ 
		for (int i = 0; i < n - 1; i++)
		{
			if (arr[i] > arr[i + 1])
			{
				max_idx = i;
				swap(arr + i, arr + i + 1);

			}
		}
	}
}

void swap(int* xp, int* yp)
{
	int temp;
	temp = *xp;
	*xp = *yp;
	*yp = temp;
}

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