programing

정렬을 수행하기 위한 C 라이브러리 함수

prostudy 2022. 6. 21. 22:23
반응형

정렬을 수행하기 위한 C 라이브러리 함수

C standard library에서 정렬할 수 있는 라이브러리 기능이 있나요?

qsort()당신이 찾고 있는 기능이에요.데이터 배열에 대한 포인터, 배열 내의 요소 수, 각 요소의 크기 및 비교 함수를 사용하여 호출합니다.

이 기능은 기능을 발휘하여 어레이가 제자리에 정렬됩니다.예를 들어 다음과 같습니다.

#include <stdio.h>
#include <stdlib.h>
int comp (const void * elem1, const void * elem2) 
{
    int f = *((int*)elem1);
    int s = *((int*)elem2);
    if (f > s) return  1;
    if (f < s) return -1;
    return 0;
}
int main(int argc, char* argv[]) 
{
    int x[] = {4,5,2,3,1,0,9,8,6,7};

    qsort (x, sizeof(x)/sizeof(*x), sizeof(*x), comp);

    for (int i = 0 ; i < 10 ; i++)
        printf ("%d ", x[i]);

    return 0;
}

C/C++ 표준 라이브러리<stdlib.h>포함하다qsort기능.

세계 최고의 퀵 정렬 구현은 아니지만 빠르고 매우 쉽게 사용할 수 있습니다.qsort의 정식 구문은 다음과 같습니다.

qsort(<arrayname>,<size>,sizeof(<elementsize>),compare_function);

compare_function만 구현하면 됩니다.compare_function은 "const void" 타입의 2개의 인수를 받아들여 적절한 데이터 구조에 캐스트하고 다음 3개의 값 중 하나를 반환합니다.

  • a가 b보다 앞일 경우 negative(부정)
  • 0, a가 b와 같은 경우
  • a가 b 뒤에 있어야 하는 경우, positive

1. 정수 목록 비교:

만약이라면 단순히 a와 b를 정수로 던진다.x < y,x-y음수입니다.x == y,x-y = 0,x > y,x-y긍정적이다x-y숏컷을 사용하는 방법:)*x - *y로.*y - *x내림차순/내림차순으로 정렬하기 위해

int compare_function(const void *a,const void *b) {
int *x = (int *) a;
int *y = (int *) b;
return *x - *y;
}

2. 문자열 목록 비교:

문자열을 비교하려면strcmp안에서 기능하다<string.h>lib.strcmp디폴트로는 -ve,0,적절하게 반환됩니다.역순으로 정렬하려면 strcmp가 반환하는 부호를 반대로 하면 됩니다.

#include <string.h>
int compare_function(const void *a,const void *b) {
return (strcmp((char *)a,(char *)b));
}

3. 부동 소수점비교:

int compare_function(const void *a,const void *b) {
double *x = (double *) a;
double *y = (double *) b;
// return *x - *y; // this is WRONG...
if (*x < *y) return -1;
else if (*x > *y) return 1; return 0;
}

4. 키에 따른 레코드 비교:

때로는 레코드와 같은 더 복잡한 것들을 분류해야 합니다.다음은 를 사용하여 수행하는 가장 간단한 방법입니다.qsort도서관.

typedef struct {
int key;
double value;
} the_record;

int compare_function(const void *a,const void *b) {
the_record *x = (the_record *) a;
the_record *y = (the_record *) b;
return x->key - y->key;
}

찾고 계신 것 같은데요?qsort.
qsortfunction은 퀵소트 알고리즘의 실장입니다.stdlib.hC/C++.

호출하는 구문은 다음과 같습니다.qsort기능:

void qsort(void *base, size_t nmemb, size_t size,int (*compar)(const void *, const void *));

인수 목록:

base: 배열의 첫 번째 요소 또는 기본 주소에 대한 포인터
nmemb: 배열 내의 요소 수
size: 각 요소의 바이트 단위 크기
compar: 두 요소를 비교하는 함수

다음은 를 사용하는 코드 예시입니다.qsort배열 정렬:

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

int arr[] = { 33, 12, 6, 2, 76 };

// compare function, compares two elements
int compare (const void * num1, const void * num2) {
   if(*(int*)num1 > *(int*)num2)
    return 1;
   else
    return -1;
}

int main () {
   int i;

   printf("Before sorting the array: \n");
   for( i = 0 ; i < 5; i++ ) {
      printf("%d ", arr[i]);
   }
   // calling qsort
   qsort(arr, 5, sizeof(int), compare);

   printf("\nAfter sorting the array: \n");
   for( i = 0 ; i < 5; i++ ) {   
      printf("%d ", arr[i]);
   }
  
   return 0;
}

입력할 수 있습니다.man 3 qsortLinux/Mac 터미널에서 자세한 정보를 얻을 수 있습니다.qsort.
qsort man 페이지 링크

확실히:qsort()는 일종의 구현입니다(이름에서 알 수 있듯이 반드시 빠른 정렬은 아닙니다).

man 3 qsort에 접속하거나 http://linux.die.net/man/3/qsort에서 읽어보십시오.

표준 라이브러리는 아니지만 https://github.com/swenson/sort에는 다음과 같은 매우 빠른 정렬 라우팅에 액세스하기 위해 포함할 수 있는 헤더 파일이 2개밖에 없습니다.

#정의 SORT_NAME int64#정의 SORT_TYPE int64_t#정의 SORT_CMP(x, y) (x) - (y)
#contains "discontains."h"/* 이제 int64_quick_sort, int64_tim_sort 등에 액세스할 수 있습니다(예: */).int64_quick_sort(arr, 128); /* 일부 int *arr 또는 int ar [ 128 ]; */

은 표준 .qsort함수 포인터를 사용하지 않고 선택할 수 있는 다른 정렬 알고리즘 옵션도 많기 때문입니다.

C89에 있기 때문에 기본적으로 모든 C 컴파일러에서 동작합니다.

해보다qsortstdlib로 설정합니다.h로 설정합니다.

qsort()<stdlib.h>.

@paxdiablo Theqsort()ISO/IEC 9899:1990(')ISO C90')를 사용합니다.

정렬 에는 C 정렬 이 몇 .stdlib.h 수 있습니다★★★★★★★★★★★★★★★★★★▼man 3 qsort를 들어 다음과 같습니다

  • 수북이 쌓다
  • 퀵소트
  • 머지소트

언급URL : https://stackoverflow.com/questions/1787996/c-library-function-to-perform-sort

반응형