정렬을 수행하기 위한 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
.
qsort
function은 퀵소트 알고리즘의 실장입니다.stdlib.h
에C/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 qsort
Linux/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 컴파일러에서 동작합니다.
해보다qsort
stdlib로 설정합니다.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
'programing' 카테고리의 다른 글
Android - 소프트 키보드를 프로그래밍 방식으로 숨기기/표시 (0) | 2022.06.21 |
---|---|
드래그 가능한 Vuetify 확장 패널 (0) | 2022.06.21 |
오류: IntelliJ IDE에서 기본 클래스를 찾거나 로드할 수 없습니다. (0) | 2022.06.21 |
vue 어플리케이션에서 Paypal 서브스크립션을 구현하려면 어떻게 해야 합니까? (0) | 2022.06.21 |
Vue CLI 3으로 Vuetify를 설치한 후 컴파일하지 못함 (0) | 2022.06.21 |