Directorio de artículos
Lenguaje C
Primitivo
void qsort ( void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) );
archivo de cabeza
#include<stdlib.h>
Ejemplo de código
Descripción
Donde const void * a
denota un puntero constante declarado a, se (int*)a
refiere a la fuerza constante de un puntero en un puntero entero a, luego agréguelo a uno de los *
puntos de puntero de posición de elemento anteriores para tomar.
Entero
#include<iostream>
#include<stdlib.h>
using namespace std;
int a[] = { 4, 3, 2, 1 };
int compare(const void* a, const void* b);
int main()
{
int i;
qsort(a, 4, sizeof(int), compare);
for ( i = 0; i < 4; i++)
{
cout << a[i] << endl;
}
return 0;
}
int compare(const void* a, const void* b)//升序
{
return *(int*)a - *(int*)b;
}
Salida: 1 2 3 4
Tipo de caracter
#include<iostream>
#include<stdlib.h>
using namespace std;
char a[][4] = { {"bca"}, {"abc"}, {"cab"} };
int compare(const void* a, const void* b);
int main()
{
int i;
qsort(a, 3, sizeof(a[0]), compare);
for ( i = 0; i < 3; i++)
{
cout << a[i] << endl;
}
return 0;
}
int compare(const void* a, const void* b)//升序
{
return strcmp((char*)a, (char*)b);
//return *(int*)a - *(int*)b;
}
Salida: abc bca cab
C ++
Generalmente, cuando se ordena una matriz, esto es simple, porque la función "comparar" del tercer parámetro puede estar predeterminada, y el valor predeterminado es el orden ascendente.
Primitivo
Hay tres parámetros:
1. La dirección inicial de la matriz,
2. La dirección final de la matriz,
3. Cómo ordenar (de grande a pequeño o de pequeño a grande).
archivo de cabeza
#include<algorithm>
Ejemplo de código
Función de comparación predeterminada
#include<iostream>
#include<algorithm>
using namespace std;
int value[] = { 5, 4, 3, 2, 1 };
bool compare(int a, int b);
int main()
{
int i;
sort(value, value + 5);
for ( i = 0; i < 5; i++)
{
cout << value[i] << endl;
}
return 0;
}
Salida: 1 2 3 4 5
Clasificación de matriz parcial
También puedes jugar así:
#include<iostream>
#include<algorithm>
using namespace std;
int value[] = { 5, 4, 3, 2, 1 };
bool compare(int a, int b);
int main()
{
int i;
sort(value + 1, value + 5);
for ( i = 0; i < 5; i++)
{
cout << value[i] << endl;
}
return 0;
}
Salida: 5 1 2 3 4
Función de comparación personalizada
#include<iostream>
#include<algorithm>
using namespace std;
int value[] = { 5, 4, 3, 2, 1 };
bool compare(int a, int b);
int main()
{
int i;
sort(value, value + 5, compare);
for ( i = 0; i < 5; i++)
{
cout << value[i] << endl;
}
return 0;
}
bool compare(int a, int b) //降序
{
return a > b;
}
Salida: 5 4 3 2 1 en
orden descendente
Función de comparación de funciones de biblioteca (espacio de nombres estándar)
less<数据类型>()
greater<数据类型>()
Tipo de caracter:
#include<iostream>
#include<algorithm>
using namespace std;
char value[] = { 'a', 'b', 'c', 'd', 'e' };
int main()
{
int i;
sort(value, value + 5, greater<char>());
for ( i = 0; i < 5; i++)
{
cout << value[i] << endl;
}
return 0;
}
Salida: edcba
Ordenar la función de comparación personalizada de estructura
#include<iostream>
#include<algorithm>
using namespace std;
struct student
{
string name;
int age;
}value[3];
bool compare(const student& a, const student& b);
int main()
{
int i;
value[0] = { "Kite", 10 };
value[1] = { "Tom", 15 };
value[2] = { "Mike", 20 };
sort(value, value + 3, compare);
for ( i = 0; i < 3; i++)
{
cout << value[i].name << " " << value[i].age << endl;
}
return 0;
}
bool compare(const student& a, const student& b)
{
if (a.name == b.name)
{
return a.age < b.age;
}
else
{
return a.name < b.name;
}
}
Exportación:
Kite 10
Mike 20
Tom 15
Ordenar operadores relacionales de sobrecarga de estructura
#include<iostream>
#include<algorithm>
using namespace std;
struct student
{
string name;
int age;
bool operator < (const student& b) const //符号重载
{
if (name == b.name)
{
return age < b.age;
}
else
{
return name < b.name;
}
}
//简单地说,和之前的 compare 函数相比,就是把当前“对象”看作 a 了
}value[3];
int main()
{
int i;
value[0] = { "Kite", 10 };
value[1] = { "Tom", 15 };
value[2] = { "Mike", 20 };
sort(value, value + 3);
for ( i = 0; i < 3; i++)
{
cout << value[i].name << " " << value[i].age << endl;
}
return 0;
}
Exportación:
Kite 10
Mike 20
Tom 15