카테고리 없음
[C/알고리즘] 선택 정렬 Selection Sort
미친토끼
2021. 3. 2. 12:13
//선택정렬 selectionSort.c
#include <stdio.h>
#include <stdlib.h>
// int형 두개를 맞바꿔주는 함수.
void int_swap(int *x, int *y) {
int tmp = *x;
*x = *y;
*y = tmp;
}
// long int형 두개를 맞바꿔주는 함수.
void long_swap(long *x, long *y) {
long tmp = *x;
*x = *y;
*y = tmp;
}
void printArray(int *array, int length) {
for (int i = 0; i < length; i++) {
printf("%ld\n", array[i]);
}
printf("\n");
}
void selectionSort(int *array, int length) {
int min, min_idx, cur;
//최소값 찾기
for (int i = 0; i < length; i++) {
min = array[i]; //배열의 첫번째 원소를 최소값으로 초기 설정.
min_idx = i; //그 인덱스는 0
cur = i; // 정렬 시작점. 처음은 0. 정렬이 하나씩 될수록 그 다음번 인덱스를 지목한다.
for (int j = i; j < length; j++) { //i까지는 정렬되었으므로 그다음부터 시작.
if (min > array[j+1]) { // 최소 설정값보다 작은 값을 만나면 그 값과 인덱스를 기록.
min = array[j+1];
min_idx = j + 1;
}
}
//최소값이 있는 index와 현재 cur가 있는 지점의 데이터를 바꾼다.
//최소값 인덱스와 현재 cur가 동일하다면 이미 정렬된 것이므로 데이터를 맞바꿀 필요가 없다.
if (min_idx != cur)
int_swap(&array[cur], &array[min_idx]);
//printf("최소값 : %d, 위치 : %d\n", min, min_idx);
}
}
int main (){
//int array[] = {1, 10, 5, 3, 7};
//int array[] = {1, 10, 5, 8, 7, 6, 4, 3, 2, 9};
//const int length = sizeof(array) / sizeof(int);
const int length = 1000;
int *array = calloc(length, sizeof(int));
for (int i = 0; i < length; i++)
array[i] = rand();
selectionSort(array, length);
printArray(array, length);
free(array);
return 0;
}
----- 실행 결과----
2416949
6072641
6939507
7684930
8936987
10901063
11614769
11671338
12260289
12895151
14989683
19485054
..........
2114937732
2118421993
2130794395
2135019593
2137100237
2137390358
2142757034
2143124030
2145174067