카테고리 없음
[C/알고리즘] 거품정렬 Bubble Sort
미친토끼
2021. 3. 2. 11:13
#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 bubbleSort(long *array, int length) {
int i, j, fixed;
for (i = 0; i < length - 1; i++) {
fixed = 0; //fixed 는 위치바꿈이 몇 번 일어났는지 기록한다.
for (j = 0; j < length - 1 - i; j++) {
if (array[j] > array[j+1]) { //앞의 수가 뒤의 수보다 크다면
long_swap(&(array[j]), &(array[j+1])); // 서로 자리를 바꾼다.
fixed += 1; //자리바꿈 횟수 기록
}
}
if (fixed == 0) break; //한번 순회할 동안 한번도 자리바꿈이 없었다면 정렬이 끝났다.
}
return;
}
void printArray(long int *array, int length) {
for (int i = 0; i < length; i++) {
printf("%ld\n", array[i]);
}
printf("\n");
}
int main() {
//long num[] = { 5, 1, 10, 3, 8};
//long num[] = { 1, 10, 5, 8, 7, 6, 4, 3, 2, 9};
//윈도우에서는 sizeof(int)와 sizeof(long)이 4바이트로 같은데, 리눅스에서는 4바이트와 8바이트로 길이가 다르다.
//습관적으로 sizeof(int)로 하지 말고 자료형에 맞춰 기재할 것. 리눅스에서는 에러 생기는데 윈도우에서는 멀쩡이 잘 돌아가서 당황했네.
//const int length = sizeof(num) / sizeof(long);
const int length = 1000;
long *num = calloc(length, sizeof(long));
for (int i = 0; i < length; i++)
num[i] = rand();
bubbleSort(num, length);
printArray(num, length);
free(num);
return 0;
}
----- 실행 결과 -----
2416949
6072641
6939507
7684930
8936987
10901063
11614769
11671338
12260289
.........
2114937732
2118421993
2130794395
2135019593
2137100237
2137390358
2142757034
2143124030
2145174067
2147469841