índice
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
matrizes de caracteres:
其实你会发现一个规律。
例如: 你要排前三个数 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).
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:
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值从小到大对结构体排序
}
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:
Exemplo: string: