카테고리 없음

[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