카테고리 없음
[C/알고리즘] 삽입정렬 Insertion Sort
미친토끼
2021. 3. 2. 12:59
// 삽입정렬 insertionsort.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");
}
// 삽입정렬 함수: int *array: 배열, int length: 배열의 길이
void insertionSort(int *array, int length) {
//배열의 길이 -1 만큼 순회하면 된다.
for (int i = 1; i < length ; i++) {
// 새로운 원소가, 정렬된 것들 뒤에서부터 차근차근 앞으로 오며 자신의 값보다 큰 값이 있으면 교체하고
// 작은 값을 만나면 멈춘다. 이미 그 부분 앞으로는 정렬이 되어 있기 때문에.
for (int j = i; j > 0; j--) {
if (array[j-1] > array[j]) //앞의 값과 비교하여 앞의 값이 크면
int_swap(&array[j-1], &array[j]); //그것과 자신을 교체한다.
else
break;
}
}
}
int main (){
//int array[] = {5, 7, 4, 3, 2};
//int array[] = {1, 10, 5, 8, 7, 6, 4, 3, 2, 9}; // 10개
//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();
insertionSort(array, length);
// 정렬한 내용을 출력한다.
printArray(array, length);
free(array);
return 0;
}
-------- 실행 결과 -----------
2416949
6072641
6939507
7684930
8936987
10901063
11614769
11671338
12260289
12895151
..........
2118421993
2130794395
2135019593
2137100237
2137390358
2142757034
2143124030
2145174067
2147469841