현재 위치 - 인적 자원 플랫폼망 - 미니프로그램 자료 - 정렬 함수의 정확한 사용법은 무엇인가요?
정렬 함수의 정확한 사용법은 무엇인가요?
정렬 함수의 사용법:

소 정렬은 ACM 문제를 풀 때 흔히 사용하는 연산입니다. 매번 버블링과 같은 O(n 2)의 순위를 직접 작성하면 프로그램이 쉽게 타임아웃될 뿐만 아니라 귀중한 게임 시간을 낭비하고 틀릴 가능성이 매우 높습니다.STL에는 n*log2(n)의 복잡도로 배열을 직접 정렬할 수 있는 정렬 함수가 있습니다. 이 함수를 사용하려면 헤더 파일을 포함해야 합니다.

이 함수는 두 개 또는 세 개의 인수를 전달할 수 있습니다. 첫 번째 인수는 정렬할 간격의 첫 번째 주소이고, 두 번째 인수는 간격의 마지막 주소 옆의 주소입니다. 즉, 정렬 간격은 [a, b]입니다. 간단히 말해, 배열 int a[100]이 있습니다. a[0]에서 a[99]까지 요소를 정렬하려면 sort(a, a+100)를 작성하면 됩니다. 기본 정렬은 오름차순입니다.

내 문제 "AC 전략"을 예로 들어 배열 T의 요소를 0에서 len-1까지 정렬하려면 sort(t, T+len);

벡터 v를 정렬하는 것도 비슷하게 sort(v.begin(), v . end());

정수보다 작은 타입으로 정의되어 있는 한, 정렬을 위한 데이터 타입은 정수로 제한되지 않습니다(예: 문자열 클래스와 같은 연산보다 작은 타입).

보다 작은 연산의 데이터 유형이 정의되지 않았거나 정렬 순서를 변경하려는 경우 세 번째 매개 변수인 비교 함수를 사용해야 합니다. 비교 함수는 '보다 작음' 관계가 무엇인지 지정하는 반환값이 bool인 사용자 정의 함수입니다. 정수 배열을 내림차순으로 정렬하려면 비교 함수인 cmp를 정의하여 시작할 수 있습니다.

Bool cmp(int a, int b)

{

return a & gtb;

}

정렬할 때 sort(a, a+100, CMP)를 작성합니다.

정의했다고 가정합니다. 구조체 노드를 정의했다고 가정합니다.

구조체 노드 {

int a;

int b;

double c;

}

노드 타입의 배열 노드 arr[100]이 있고, 이를 먼저 A 값에 따라 오름차순으로, 같은 A 값에 대해 B 값에 따라 내림차순으로, 같은 B 값에 대해 C에 따라 내림차순으로 정렬하고 싶다고 가정합니다. 다음과 같이 비교 함수를 작성할 수 있습니다.

코드 스니펫은 다음과 같습니다.

Bool cmp(노드 x, 노드 y)

{

If (x.a! = y.a) return x.a

If (x.b! = y . b)return x . b & gt; y.b

return return x.c & gty.c

}Sort by writing sort(arr, a+100, CMP);

qsort(s[0], n, sizeof(s[0]), CMP);

int cmp(constant void *a. 상수 void *b)

{

return *(int *)a-*(int *)b;

}

먼저, int 타입의 배열을 정렬합니다

int num[100];

Sample:

int cmp(constant void *a. 상수 void *b)

{

return *(int *)a-*(int *)b;

}

qsort(num, 100, sizeof(num[0]), CMP);

둘째, int 타입의 배열을 정렬(int 타입과 마찬가지로 )

char word[100];

샘플:

int cmp(상수 void *a, 상수 void *b)

{

return *(char *)a-*(int *)b;

}

qsort(word. 100, sizeof(word[0]), CMP);

셋째, double 타입의 배열을 정렬합니다(특히 주의)

double in[100];

int cmp(constant void *a, constant void *b)

{

return *(double *)a & gt; *(double *)b?1 : -1;

}

qsort(in, 100, sizeof(in[0]), CMP);

넷째, 첫 번째 레벨에서 구조를 정렬

구조 입력

{

더블 데이터 ;

int other

}s[100]

// 데이터의 값을 기준으로 가장 작은 것부터 가장 큰 것까지 구조를 정렬합니다. 구조체에는 다양한 유형의 정렬 키워드 데이터가 있습니다. 위의 예제를 참고하여 작성해 보세요.

int cmp(상수 void *a, 상수 void *b)

{

return((In *)a)-& gt; data-((In *)b)-& gt; data;

}

qsort(s, 100, sizeof(s[0]), CMP);

V. 구조

구조 입력

{

int x;

int y;

} s[100];

//Sort X는 가장 작은 것부터 가장 큰 것까지, Y는 X가 같으면 가장 큰 것부터 가장 작은 것까지 정렬합니다.

int cmp(상수 void *a, 상수 void *b)

{

*structure in c = (In *)a;

structure In * d = (In *)b;

if (c->; x!= d-& gt; x) return c-& gt; x-d-& gt; x;

p>또는 반환 d-& gt; y - c->y;

}

qsort(s, 100, sizeof(s[0]), CMP);

여섯째, 문자열 정렬

구조 입력

{

int data;

char str[ 100];

} s[100];

//구조체 내 사전 순서에 따라 문자열 str을 정렬합니다.

int cmp(상수 void *a, 상수 void *b)

{

return strcmp((In *)a)-& gt; str, ((In *)b)->str);

}

qsort(s, 100, sizeof(s[0]) , CMP);

7. 지오메트리에서 볼록 패킷을 찾기 위한 cmp 계산

1을 제외한 모든 점을 회전 각도별로 정렬하는 cmp 함수

Intcmp (constvoid * a, constvoid * b)//키 cmp.

{

constvoid * c = (point *) a;

constvoid * d = (point *) b;

If( calc(*c, *d, p[1]) & lt; 0) return 1;

else if(!calc(*c, *d, p[1]) & amp; & ampdis(c->; x, c-& gt; y, p[1]. x, p[1]. y) & lt; dis(d->; x, d-& gt; y, p [1]. x, p [1]. y))//직선상에 있으면 먼 것을 앞에 놓습니다.

리턴값 1;

else 반환값 -1;

}