본문 바로가기
DSA

배열 연습2 (선택정렬 알고리즘)(Selection Sort Algorithm)

by KWONE 2024. 5. 26.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void main(void)
{
	int i;
	int min;
	int in[10] = { 7,2,9,0,1,4,6,8,3,5 };

	printf("Array: ");
	for (i = 0; i < 10; i++)
		printf("%2d", in[i]);
	printf("\n");

	min = in[0];
	for (i = 0; i < 10; i++) {
		if (in[i] < min) {
			min = in[i];
		}
	}
	printf("최소값 : %d \n", min);

}

1.최소값 찾기

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void main(void)
{
	int i;
	int min;
	int minpos;
	int in[10] = { 7,2,9,0,1,4,6,8,3,5 };
	int temp;
	printf("Array: ");
	for (i = 0; i < 10; i++)
		printf("%2d", in[i]);
	printf("\n");

	min = in[0];
	for (i = 0; i < 10; i++) {
		if (in[i] < min) {
			min = in[i];
		}
	}
	printf("최소값 : %d \n", min);

	minpos = 0;
	for (i = 0; i < 10; i++)
	{
		if (in[i] < in[minpos]) {
			minpos = i;
		}
	}
	printf("minpos:: %d\n", minpos);
}

2.최소값의 index 위치 찾기 minpos

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void main(void)
{
	int i;
	int min;
	int minpos;
	int in[10] = { 7,2,9,0,1,4,6,8,3,5 };
	int temp;
	printf("Array: ");
	for (i = 0; i < 10; i++)
		printf("%2d", in[i]);
	printf("\n");

	min = in[0];
	for (i = 0; i < 10; i++) {
		if (in[i] < min) {
			min = in[i];
		}
	}
	printf("최소값 : %d \n", min);

	minpos = 0;
	for (i = 0; i < 10; i++)
	{
		if (in[i] < in[minpos]) {
			minpos = i;
		}
	}
	printf("minpos : %d\n", minpos);

	temp = in[0];
	in[0] = in[minpos];
	in[minpos] = temp;

	printf("After: ");
	for (i = 0; i < 10; i++)
		printf("%2d", in[i]);
	printf("\n");

	return 0;
}

3.최소값을 찾아 처음과 교환하기

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void main(void)
{
	int i,j;
	int min;
	int minpos;
	int in[10] = { 7,2,9,0,1,4,6,8,3,5 };
	int temp;
	printf("Array: ");
	for (i = 0; i < 10; i++)
		printf("%2d", in[i]);
	printf("\n");

	min = in[0];
	for (i = 0; i < 10; i++) {
		if (in[i] < min) {
			min = in[i];
		}
	}
	printf("최소값 : %d \n", min);

	minpos = 0;
	for (i = 0; i < 10; i++)
	{
		if (in[i] < in[minpos]) {
			minpos = i;
		}
	}
	printf("minpos : %d\n", minpos);

	temp = in[0];
	in[0] = in[minpos];
	in[minpos] = temp;

	
	// Selection sort algorithm
	for (i = 0; i < 10 - 1; i++) {
		// Assume the minimum is the first element
		minpos = i;
		// Find the index of the minimum element in the unsorted part
		for (j = i + 1; j < 10; j++) {
			if (in[j] < in[minpos]) {
				minpos = j;
			}
		}
		// Swap the found minimum element with the first element
		if (minpos != i) {
			temp = in[i];
			in[i] = in[minpos];
			in[minpos] = temp;
		}
	}

	printf("After: ");
	for (i = 0; i < 10; i++)
		printf("%2d", in[i]);
	printf("\n");


	return 0;
}

4.선택정렬 알고리즘을 사용하여 오름차순 배열정렬(중요)

 

//선택정렬 알고리즘 외우기
for (i = 0; i < 10 - 1; i++) {
	// 첫 원소를 최소인덱스 원소로 두기
	minpos = i;
	// Find the index of the minimum element in the unsorted part
	for (j = i + 1; j < 10; j++) {
		if (in[j] < in[minpos]) {
			minpos = j;
		}
	}
	// 최소값원소를 첫번째 원소와 교환하기
	if (minpos != i) {
		temp = in[i];
		in[i] = in[minpos];
		in[minpos] = temp;
	}
}

선택정렬 알고리즘 외우기

첫 번째 값과 다른 값들을 비교하여 가장 작은 값과 교환

같은 방법으로 두 번째 값과 그 이후 값 중에서 가장 작은 값과 교환

기준 값을 뒤로 이동하면서 반복