선택정렬(Selection Sort)

 

1. 주어진 값들 중에 최소값을 찾는다 

2. 최소값을 맨 앞의 값과 교환한다. 

3. 맨 앞의 값을 뺀 위치에서 1과 2를 반복한다. 

 

#include <stdio.h>

void SelecSort(int *arr, int num)
{
	int i, j;
	int min;
	int temp;

	for (i = 0; i < num - 1; i++)
	{
		//i번째 단계: i번째 원소를 기준으로 n-1개의 원소를 비교하기 시작
		min = i;
		for (j = i + 1; j < num; j++)  	//기준원소부터 시작해 끝원소까지 중에 최소값 찾기 
		{
			if (arr[j] < arr[min])
			{
				min = j;
			}
		}
		//SWAP 
		temp = arr[min];
		arr[min] = arr[i];
		arr[i] = temp;
	}
}

int main()
{
	int arr[7] = { 9, 4, 8, 12, 2, 5, 1 };
	int i;
	SelecSort(arr, sizeof(arr) / sizeof(int));

	printf("정렬 후: ");
	for (i = 0; i < sizeof(arr)/sizeof(int); i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
	return 0;
}

 

다른 방법으로 구현해봤다.

#include <stdio.h>

void SelectionSort(int *arr, int len)
{
	int i, j, temp;
	for (i = 0; i < len-1; i++)
	{
		printf("i: %d \n", i);
		for (j = i + 1; j < len; j++)
		{
			if (arr[i]>arr[j])
			{
				printf("Smallest:%d --> SWAP\n", arr[j]);
				temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}

		for (int a = 0; a < len; a++)
		{
			printf("%d ", arr[a]);
		}
		printf("\n\n");
	}
}

int main()
{
	int arr[] = { 5, 1, 2, 8, 26, 14 };
	int len = sizeof(arr) / sizeof(int);

	SelectionSort(arr, len);
	/*
	for (int i = 0; i < len; i++)
	{
	printf("%d ", arr[i]);
	}
	*/

	return 0;
}

728x90

+ Recent posts