반응형
선택 정렬의 개념: 가장 작은 것을 골라서 맨 앞으로 보내는 알고리즘
1부터 10까지의 숫자가 저장된 배열을 오름차순으로 출력하는 문제를 풀면서 선택 정렬을 설명하겠다.
먼저 소스코드이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#include <stdio.h>
int main()
{
int i, j, min, index, temp;
int array[10] = { 2,4,6,8,9,7,5,3,1,10 };
for (i = 0; i < 10; i++)
{
min = 9999;
for (j = i; j < 10; j++)
{
if (min > array[j])
{
min = array[j];
index = j;
}
}
temp = array[i];
array[i] = array[index];
array[index] = temp;
}
for (i = 0; i < 10; i++)
{
printf("%d ", array[i]);
}
return 0;
}
|
cs |
1부터 10까지의 숫자가 무작위로 저장된 배열을 입력했다.
|
int array[10] = { 2,4,6,8,9,7,5,3,1,10 };
|
cs |
반복문 안에 있는 min이란 변수에 입력할수 있는 정수 중에 가장 큰 수로 입력했다.
(필자는 9999까지 입력할 수 있다고 가정했다.)
그 후 반복문을 이용해 min보다 array[j]의 크기가 작으면 array [j]의 값을 min에 넣는 형식으로
최솟값을 가진 배열을 찾았다.
1
2
3
4
5
6
7
8
9
|
min = 9999;
for (j = i; j < 10; j++)
{
if (min > array[j])
{
min = array[j];
index = j;
}
}
|
cs |
그리고 제 3의 변수를 호출해 그 안에 맨 앞에 있는 배열의 값을 저장하고
맨 앞에 있는 배열에 최솟값을 가진 배열의 값을 저장한다.
그 후, 최솟값을 가진 배열에 (맨 앞에 있는 배열의 값을 가진) 제 3의 변수의 값을 저장한다.
1
2
3
|
temp = array[i];
array[i] = array[index];
array[index] = temp;
|
cs |
그 후 반복문을 이용해 출력을 하면
1
2
3
4
|
for (i = 0; i < 10; i++)
{
printf("%d ", array[i]);
}
|
cs |
이렇게 출력이 된다.
반응형