C에서 C ++ 구조체 및 정렬 함수
정렬의 마법 효과는 이전에 자세히 논의되었으며 세부 사항을 전송할 수 있으므로 여기서는 반복하지 않겠습니다. 그러나 매우 실용적인 문제는 C가 문제를 풀 때마다 자체 정렬 기능을 가지고 있지 않다는 것입니다! ! 시간 초과로부터 버블 정렬 또는 버킷 정렬을 방지하기 위해 빠른 정렬 코드 만 추가 할 수 있습니다 (너무 길고 작은 세부 사항으로 인해 잘못 작성하기 쉽습니다).이 이유는 매우 성가시기 때문에 계속 유지합니다. C ++로 전환하고 싶은 이유.
C와 C ++ 구조체의 유사점과 차이점
참고로 둘의 차이점을 먼저 말씀 드리지만 C 언어에서는 struct 키워드를 struct 정의 후에 작성해야하며 C ++에서는 생략 할 수 있습니다! 오랫동안 살다!
struct point{
int x,y;
};
//struct point p[100];
//传统C就要加上关键字struct
point p2[100];
C 및 C ++ 정렬 기능
C ++ PRIMER에 따르면 C ++에 내장 된 정렬 기능이 많다는 것을 알고 있습니다.
기능 명 | 기능 설명 |
---|---|
종류 | 주어진 간격으로 모든 요소 정렬 |
안정 _ 정렬 | 주어진 간격에서 모든 요소의 안정적인 정렬 |
부분 _ 정렬 | 주어진 간격의 모든 요소를 부분적으로 정렬 |
partial_sort_copy | 주어진 간격 복사 및 정렬 |
nth_element | 주어진 간격에서 위치에 해당하는 요소 찾기 |
정렬 됨 | 범위가 정렬되었는지 확인 |
분할 | 특정 조건을 충족하는 요소를 앞에 배치 |
stable_partition | 특정 조건을 충족하는 상대적으로 안정적인 요소가 전면에 배치됩니다. |
하지만 개인적인 용도에 관해서는 정렬 기능 만 사용할 수 있으며 공간상의 이유로이 블로그에서는 정렬의 오름차순과 내림차순 만 강조하고 설명합니다. 자세한 내용은 전문 서적에서 읽을 수 있습니다.
먼저 복잡도 인 n * log2n을 살펴 보겠습니다. 이는 버블 링과 같은 정렬 알고리즘보다 더 효율적이지만 빠른 정렬은 아닙니다 (그다지 나쁘지는 않습니다).
다른 일반적인 정렬 알고리즘은 이 문서 에서 볼 수 있습니다.
标准形式
먼저 헤더 파일 소개
#include <algorithm>
정렬 대상은 벡터 배열 또는 기존 int a [] 배열 일 수 있습니다.
C를 배우고 있고 아직 벡터를 모르는 경우이 기사를 읽을 수 있습니다.
具体形式
sort(start,end,cmp)
* start는 정렬 된 배열의 시작 주소를 나타냅니다 (주소 인 경우 !!!).
벡터 배열을 사용하는 경우 벡터는 컨테이너이므로 v.begin () v.end ()를 사용하여 머리와 꼬리를 나타내야합니다.
전통적인 int a [] 배열을 사용하는 경우 a + n을 직접 사용하여 머리와 꼬리를 나타낼 수 있습니다.
* end는 배열 끝 주소의 다음 숫자를 나타냅니다 (다음 숫자입니다 !! 문자열 '\ 0'과 유사 할 수 있음).
* cmp 사용자 정의 정렬 방법, 선택 사항, 기본적으로 오름차순
내림차순으로 정렬하려면 어떻게해야합니까?
cmp 기능 추가
bool cmp(int a, int b){ return a>b; }
그런 다음 오른쪽이 인 <B <C <<인 가장 큰해야합니다, 오름차순하려면이의 나의 이해는, 이쪽
은 내림차순의 경우, 왼쪽은이 가장 큰, 즉, A가> B는> C>를하다,이다
이 가능하다 cmp 기능을 기억하는 데 도움이됩니다.
使用示例
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(int a, int b){
return a>b;
}
int main(){
int i;
int a1[]={3,4,2,5,8,7,6,9,1};
vector<int> a2(9);
for ( i=0; i<9; i++ )
cin >> a2[i];
sort ( a1, a1+9 );
sort ( a2.begin(), a2.end());
for ( i=0; i<9; i++ )
cout << a1[i];
cout << endl;
for ( i=0; i<9; i++ )
cout << a2[i];
cout << endl;
return 0;
}
进阶用法
다음 내용은 바이두 백과 사전에서 발췌 한 것입니다. 사실이 고급 사용법은 우리 생활에서도 비교적 흔합니다. 예를 들어 대학 입학 시험의 총점이 같을 때 과학 학생들은 수학 점수에 따라 순위가 매겨 지지만 현재 사용하지 않기 때문에 자세히 설명하지 않겠습니다. 나는 미래에 시간이있을 때 요약 할 다른 기사를 쓸 것입니다.
구조 노드를 정의한다고 가정합니다.
struct node { int a; int b; double c; }
노드 유형 노드 arr [100]의 배열이 있습니다. 정렬하고 싶습니다. 먼저 값의 오름차순으로 정렬하고, 값이 같으면 b 값의 내림차순으로 정렬하고, b가 여전히 동일하면 c의 내림차순으로 정렬합니다. 비교 함수를 작성할 수 있습니다.
다음은 코드 조각입니다.
bool cmp(node x,node y) { if(x.a!==y.a) return x.a<y.a; if(x.b!==y.b) return x.b>y.b; return x.c>y.c; }