[C to C ++] 구조체 및 정렬 함수의 간단한 사용

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;
}

추천

출처blog.csdn.net/m0_49973750/article/details/109431018