[Arduino] 정렬 (qsort)

Arduino 2018. 1. 23. 14:42




qsort()


http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#gafd4bf2faec43342e7ad3d2ab37bac1fe

void qsort(
    void*         __base,  // 비교할 배열
    size_t        __nmemb, // 비교할 배열의 전체 아이템 수
    size_t        __size,  // 비교할 배열 아이템 하나의 사이즈
    __compar_fn_t __compar // 비교함수
)



비교함수 (__compar_fn_t)


http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#ga35e28bfcc8d641e0eebd66f4dc559a3f

typedef int(* __compar_fn_t) (const void*, const void*)



예제

// 비교함수
int sort_asc(const void* item1, const void* item2)
{
    // int 비교라고 가정하고 int 값으로 캐스팅
    int a = *((int*)item1);
    int b = *((int*)item2);
 
    return a - b;
}
 
unsigned long readData[10] = {};
byte itemSize = sizeof(readData[0]);
byte itemCount = sizeof(readData) / itemSize;
 
void loop()
{
    // 어떤 아날로그 값을 10번 가져와서 중앙값(median)을 취한다고 가정
    for (byte i=0; i<10; i++) {
        readData[i] = analogRead(A0);
    }
 
    // 정렬
    qsort(readData, itemCount, itemSize, sort_asc);
 
    // 중앙값 출력
    Serial.println((readData[4] + readData[5]) / 2);
}


.

'Arduino' 카테고리의 다른 글

[Arduino] 메모리 (Memory)  (0) 2018.01.23
Posted by bloodguy
,