티스토리 뷰

Programming?/C++

[C] 구조체 퀵정렬

Erlka 2012. 6. 10. 12:24


#include <stdio.h>
#include <stdlib.h>

struct student
{
    int id;
    int score;
};

 

int int_cmp(const void *a, const void *b);
int id_cmp(const void *a, const void *b);
int score_cmp(const void *a, const void *b);


void main()
{
    struct student x[10] = { {1,77},{5,44}, {3,99}, {9,66}, {8,55}, {11,44}, {22,88}, {15,22}, {45,33}, {27,11} };
    int a[10] = {3,2,1,6,7,4,5,11,49,33};

    qsort(a, 10, sizeof(int), int_cmp); // 배열이름, 배열 크기, 배열의 자료형, 비교 대상 함수를 qsort에 전달
    printf(" ======== 정수 ========\n");
    for(int i=0; i<10; i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n");
    qsort(x, 10, sizeof(struct student), id_cmp);
 

    printf(" ======== 학번 ========\n");
    for(int j = 0; j<10; j++)
    {
        printf("ID : %d, Score : %d\n",  x[j].id, x[j].score);
    }

    qsort(x, 10, sizeof(struct student), score_cmp);
 

    printf(" ======== 점수 ========\n");
    for(int k=0; k<10; k++)
    {
        printf("ID : %d, Score : %d\n", x[k].id, x[k].score);
    }

}

 

int int_cmp(const void *a, const void *b) // 넘어온 포인터는 void
{
    const int *m, *n;
    m= (const int *) a;
    n= (const int *) b;

    if(*m < *n) // *(const int*) : 강제 int 포인터로 형변환
    {
        return (-1);
    }
    else if(*m == *n)
    {
        return (0);
    }
    else
    {
        return (1);
    }
}

 

int id_cmp(const void *a, const void *b)
{
    const struct student *m, *n;
    m = (const struct student *) a;
    n = (const struct student *) b;

    if(m->id < n->id)
    {
        return (-1);
    }
    else if(m->id == n->id)
    {
        return (0);
    }
    else
    {
        return (1);
    }
}

 

int score_cmp(const void *a, const void *b)
{
    const struct student *m, *n;
    m = (const struct student *) a;
    n = (const struct student *) b;

    if(m->score < n->score)
    {
        return (-1);
    }
    else if(m->score == n->score)
    {
        return (0);
    }
    else
    {
        return (1);
    }
}

 



 
 

'Programming? > C++' 카테고리의 다른 글

[C] 구조체 최대값  (0) 2012.06.10
[C] 정수형 퀵정렬  (0) 2012.06.10
[C] 큐  (0) 2012.06.10
[C] 스택  (0) 2012.06.10
[C] 초간단 계산기  (0) 2012.06.10
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함