Explicação detalhada da função sort ()

Prefácio

Como o nome sugere, sort () é uma função de classificação que usa diferentes métodos de classificação de acordo com a situação específica, o que é mais eficiente.
De modo geral, não é recomendado usar a função qsort na linguagem C, porque qsort é mais complicado de usar e envolve muitas operações de ponteiro.
Além disso, a classificação evita as situações extremas que podem ocorrer na classificação rápida clássica que podem fazer com que a complexidade real degenere para O (n 2 ) em sua implementação.
Não há muito a dizer, vamos dar uma olhada no uso da função sort ().

Use classificar

Arquivos de cabeçalho obrigatórios

#include<algorithm>

Outras coisas necessárias:

using namespace std;

O método usado é o seguinte:

sort(首元素地址(必填), 尾元素地址的下一个地址(必填), 比较函数(非必填));

A função de comparação pode ser preenchida de acordo com suas próprias necessidades.Se a função de comparação não for escrita, o intervalo dado acima será classificado em ordem crescente por padrão.

Exemplo: classificar matrizes inteiras e duplas para classificar
Insira a descrição da imagem aqui
matrizes de caracteres:
Insira a descrição da imagem aqui

其实你会发现一个规律。
例如: 你要排前三个数  sort(a,a+3);
你要排前六个数 sort(a,a+6);
你要排前n个数  sort(a,a+n);

Devemos saber que, se a sequência precisa ser classificada, os elementos na sequência devem ser comparáveis, portanto, é necessário formular regras de classificação para estabelecer essa comparabilidade.
Especialmente como a estrutura, não há relação entre o tamanho e as regras de comparação.
O terceiro parâmetro opcional de classificação é a função de comparação (geralmente escrita como função cmp), que é usada para implementar esta regra.

Implementar a função de comparação cmp

Se você quiser classificar do grande para o pequeno, terá que usar a função de comparação cmp para "dizer" à classificação quando trocar os elementos (reverter a comparação do tamanho dos elementos).
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Ordenação da matriz da estrutura

Agora a seguinte estrutura está definida:

struct student
{
    
    
	int x,y;
};

Se você quiser ordenar a matriz de estrutura de acordo com x de grande a pequena, você pode escrever a função cmp assim

bool cmp(student a,student b)
{
    
    
	return a.x>b.x;//按x值从大到小对结构体排序 
}

Quando a matriz da estrutura é classificada, a função cmp deve ser escrita para especificar as regras.
Um exemplo é o seguinte:
Insira a descrição da imagem aqui
Se você deseja classificar por x do maior para o menor (ou seja, classificação de primeiro nível), mas quando x for igual, classifique do menor para o maior pelo tamanho de y (ou seja, classificação de segundo nível) .
Então, o texto do cmp é:

bool cmp(student a,student b)
{
    
    
	if(a.x==b.x)//x值相等时按y从小到大排 
	{
    
    
		return a.y<b.y;
	} 
	return a.x>b.x;//按x值从大到小对结构体排序 
}bool cmp(student a,student b)
{
    
    
	if(a.x != b.x)//x值不相等时按x从大到小排 
    return a.x>b.x;
	else 
	return a.y<b.y;//x相等时按y值从小到大对结构体排序 
}

Insira a descrição da imagem aqui

Classificação de contêineres

No contêiner padrão STL, apenas vetor, string e deque podem usar classificação.
Isso ocorre porque os contêineres como set e map são implementados com árvores vermelhas e pretas (apenas entenda) e os próprios elementos são ordenados, portanto, a classificação por classificação não é permitida.
Exemplo: vetor:
Insira a descrição da imagem aqui
Exemplo: string:
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/qq_46527915/article/details/114597901
Recomendado
Clasificación