STL -- sort 함수 안내
8080 단어 sort
0) C 표준 라 이브 러 리 qsort 와 의 비교: http://bbs.csdn.net/topics/330202688
std:: sort () 가 C 표준 라 이브 러 리 qsort 보다 빠 른 것 은 긍정 적 이 고 두 배 빠 를 수 있다 는 점 에 대한 해석 은 두 가지 가 있 으 며 STL 의 소스 코드 에서 도 확인 되 었 다.
하 나 는 sort 가 빠 른 정렬 이 아니 라 다양한 정렬 의 결합 이라는 점 을 확인 할 수 있 습 니 다. STL 의 sort 소스 코드 에서 빠 른 정렬, 쌓 기 정렬, 병합 정렬 등 여러 가지 정렬 방식 의 결합 을 볼 수 있 습 니 다. 그러나 qsort 는 효율 적 으로 도 최적화 되 었 습 니 다. 일반적인 빠 른 배열 보다 훨씬 빠 르 고 세 가지 정렬 의 결합 은 STL 의 sort 가 qsort 보다 한 배 빠 를 수 없 습 니까?더 많은 설 은 qsort 의 마지막 매개 변수 리 셋 함수 의 영향 을 여러 번 호출 한 결과 입 니 다.이것 도 틀림없이 지출 이 있 을 것 이다. 그러나 내 연 을 사용 하 는 것 은 효율 적 인 향상 이 아니다.많은 이론 적 인 견 해 는 실천 에서 여러 가지 요소 의 방 해 를 받 으 면 종종 모양 이 변 한다.그래, 간단 한 일: 작은 프로그램 을 써 서 테스트 해 보 자...
STL 안에 sort 함수 가 있 는데 복잡 도 는 n * log 2 (n) 입 니 다.이 함 수 를 사용 하려 면 헤더 파일 (\ # include < algorithm >) 을 포함 해 야 합 니 다.
1) 형식:
이 함 수 는 두 개의 인자 나 세 개의 인 자 를 전달 할 수 있다.첫 번 째 매개 변 수 는 정렬 할 구간 의 첫 번 째 주소 이 고 두 번 째 매개 변 수 는 구간 끝 주소 의 다음 주소 이 며 기본 적 인 정렬 방식 은 오름차 입 니 다.
쉽게 말 하면 하나의 배열 int a [100] 가 있 습 니 다. a [0] 에서 a [99] 까지 의 요 소 를 정렬 하려 면 sort (a, a + 100) 만 쓰 면 됩 니 다.
벡터 v 정렬: sort (v. begin (), v. end ();
문자열 클래스 string 정렬: sort (strings, strings + 100, cmp).(cmp 함수 정의 "연산 보다 작 음" 이 필요 합 니 다: bool cmp (string a, string b) {return a < b;}, \ # include < string >)
2) 세 번 째 인자:
정렬 된 데이터 형식 은 정수 에 국한 되 지 않 습 니 다. 연산 보다 작은 데이터 형식 을 정의 하지 않 거나 정렬 순 서 를 바 꾸 려 면 세 번 째 매개 변수 인 비교 함 수 를 사용 해 야 합 니 다.
비교 함 수 는 자신 이 정의 한 함수 입 니 다. 반환 값 은 bool 형 입 니 다. 어떤 관계 가 '작은' 인지 규정 합 니 다.
방금 정수 배열 을 내림차 순 으로 배열 하려 면 비교 함수 cmp bool cmp (int a, int b) {를 정의 할 수 있 습 니 다. return a>b; } 정렬 할 때 sort (a, a + 100, cmp) 를 씁 니 다.
3) 하나의 인 스 턴 스:
# include<iostream>
using namespace std;
# include<string.h>
# include<algorithm>//for STL
struct Node
{
char number[7];
char name[9];
int score;
};
bool Cmp1(Node a, Node b)
{
return strcmp(a.number, b.number) < 0;
}
bool Cmp2(Node a, Node b)
{
if (strcmp(a.name, b.name) != 0)
{
return strcmp(a.name, b.name) < 0;
}
return strcmp(a.number, b.number) < 0;
}
bool Cmp3(Node a, Node b)
{
if (a.score != b.score)
{
return a.score < b.score;
}
return strcmp(a.number, b.number) < 0;
}
Node node[100000];
int main()
{
int n, c, i, count = 1;
//Node node[100000];
while (cin >> n >> c)
{
if (n == 0)
{
return 0;
}
else
{
for (i = 0; i < n; i++)
{
cin >> node[i].number >> node[i].name >> node[i].score;
}
switch (c)
{
case 1:
{
sort(node, node + n, Cmp1);
break;
}
case 2:
{
sort(node, node + n, Cmp2);
break;
}
case 3:
{
sort(node, node + n, Cmp3);
break;
}
}
cout << "Case " << count++ << ":" << endl;
for (i = 0; i < n; i++)
{
cout << node[i].number << " " << node[i].name << " " << node[i].score << endl;
}
}
}
return 0;
}
View Cod
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
VHDL로 작성된 병합 분류기 (워드 비교기)다른 기사 를 참조해 주세요. 이 문서에서는 병합 분류기 내부에서 사용되는 단어 비교기(Word_Compare)에 대해 설명합니다. 워드 비교기(Word_Compare)는 두 워드( 참조)를 비교하여 둘 중 하나를 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.