1 분 소요

qsort

이번 목표는 qsort 함수 사용법을 공부하는 것이다. qsort는 C언어에서 제공하는 정렬 라이브러리 함수이고 quick sort를 이용한다

기본 구조

void qsort(void *base, size_t nel, size_t width, int(*compare)(const void*, const void*));
  • base : 정렬할 배열의 포인터

  • nel : 배열의 각 원소들의 총 수

  • width : 배열에서 원소하나의 크기

  • (*compare) : 비교를 수행할 함수 포인터

compare 함수

비교함수 내부에는 1,0,-1 중 하나를 반환해야한다. 만약 오름차순으로 정렬하고 싶으면 비교함수 내부에서 첫번째가 두번째보다 클 때 1을, 작을 때 -1, 같을 때 0을 반환하면 된다.

구현

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


int compare (const void* first, const void* second)
{
	int a = *(int*) first; //포인터를 int형으로 변환
	int b = *(int*) second;
    if (a > b)
        return 1;
    else if (a < b)
        return -1;
    else
        return 0;
}

int main()
{
    int arr[] = {5, 7, 6, 8, 9, 1, 3, 2, 4, 10};
    int array_size = sizeof(arr) / sizeof(int);
    int i;

    printf("before qsort \n")
    for (i = 0; i < array_size; i++) 
	{
		printf("%d ", arr[i]);
	}
    printf("\n");

    qsort(arr, array_size, sizeof(int), compare);

	printf("after qsort \n")
    for (i = 0; i < array_size; i++) 
	{
		printf("%d ", arr[i]);
	}


    return 0;
}


결과

before qsort 
5  7  6  8  9  1  3  2  4  10
after qsort
1  2  3  4  5  6  7  8  9  10

댓글남기기