[C언어] 선택정렬(Selection Sort)
배열에서 가장 큰 값을 찾아 맨 뒤의 원소와 교환한다.
맨 뒤의 원소를 제외하고 다른 원소들 중 가장 큰 값을 찾고 교환한다.
하나의 원소만 남을 때까지 반복한다.
1
2
3
4
5
6
7
8
|
for(i = 0; i < size - 1; i++){
max_index = 0;
for(j = 0; j < size - i; j++)
if(a[max_index] <= a[j]){//큰수찾기
max_index = j;
}
swap(a[max_index], a[size - 1 - i]);
}
|
cs |
반대의 경우로 가장 작은 수를 배열의 처음으로 보내어 고정하는 방법도 있다.
1
2
3
4
5
6
7
8
|
for(i = 0; i < size - 1; i++){
min_index = i;
for(j = i; j < size; j++)
if(a[min_index] >= a[j]){
min_index = j;
}
swap(a[min_index], a[i]);
}
|
cs |
응용 내림차순 정렬 (아래 코드와 반대의 경우로 작은 수를 배열 끝에 고정시키는 방법도 있다)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
void selection_Sort(int* a, int size)
{
int i, j, max, maxIdx, temp;
for (i = 0; i < size - 1; i++) {
maxIdx = i;
for (j = i; j <= size - 1; j++) {
if (a[maxIdx] <= a[j]) {
maxIdx = j;
}
}
temp = a[i];
a[i] = a[maxIdx];
a[maxIdx] = temp;
}
}
|
cs |
코드짤때 계속 실수 했던 부분이 maxIdex초기화를 첫번째 for문 안에 해야하는걸 까먹어서 첫번째 루프말고 아무 동작도 일어나지 않는 경우가 발생했다.
'언어 > C' 카테고리의 다른 글
[C언어] Color match 1.0 (2020.11.13update) (0) | 2020.11.13 |
---|---|
[C언어] 타자게임 만들기 (0) | 2020.07.13 |
[C언어] 게임 만들면서 쓴 함수들 (0) | 2020.06.05 |
[C언어] 타자게임 만들기 - 준비 (0) | 2020.06.05 |
[C언어] 문자열 뒤집기 (0) | 2020.05.12 |