Un pequeño programa en C
Hay una función qsort en stdlib. La clasificación rápida es muy conveniente. . .
No he usado c durante mucho tiempo y el uso específico no está claro. .
Busqué información en Internet:
Siete métodos de clasificación qsort
lt; La clasificación en este artículo está ordenada de menor a mayor;
1. Ordenar matriz de tipo int
int num[100];
Muestra:
int cmp ( const void *a, const void *b )
{
return *(int *)a - *(int *)b;
}
qsort( num, 100, sizeof(num[0]), cmp);
2. Ordenar matriz de tipo char (igual que int type)
char word[100];
Muestra:
int cmp( const void *a, const void *b)
{
return *(char *)a - * (int *)b;
}
qsort(palabra, 100, tamaño de(palabra[0]), cmp);
3. preste especial atención)
doble en[100];
int cmp( const void *a, const void *b)
{ p>
return *(doble *)a gt; *(doble *)b 1: -1;
}
qsort(en, 100, tamaño de(en [0] ), cmp);
4. Ordenar la estructura en el primer nivel
struct In
{
datos dobles
p>
int other;
}s[100]
//Ordena las estructuras de pequeña a grande según el valor de los datos, con respecto a la clasificación de datos clave en la estructura Puede haber muchos tipos, consulte el ejemplo anterior para escribir
int cmp( const void *a, const void *b)
{
devolver (*(En *)a)-gt; datos gt (*(En *)b)-gt; datos 1: -1; s, 100, sizeof(s[0]),cmp);
Clasificación de estructuras de segundo nivel
struct In
{
int x;
int y;
}s[100];
//Ordena x de pequeño a grande, cuando x es igual , ordene y de grande a pequeño
int cmp( const void *a, const void *b)
{
struct In *c = (In *)a;
struct In *d = (In *)b;
if(c-gt; x != d-gt; x) return c-gt; - d-gt;
else return d-gt; y - c-gt;
}
qsort(s, 100, tamaño de (s[0] ), cmp);
6. Ordenar cadenas
struct In
{
int da
ta;
char str[100];
}s[100];
//Ordena la cadena str en la estructura en orden del diccionario
p>int cmp ( const void *a, const void *b)
{
return strcmp( (*(In *)a)-gt; str, ( *(In *)b)-gt; str );
}
qsort(s, 100, tamaño de(s[0]),
;7. Cmp para encontrar casco convexo en geometría computacional
int cmp(const void *a, const void *b) //La función clave de cmp es ordenar todos los puntos excepto 1 punto por ángulo de rotación.
{
punto de estructura *c=(punto *)a;
punto de estructura *d=(punto *)b;
if( calc(*c, *d, p[1]) lt; 0) devuelve 1
else if( !calc(*c, *d, p[1]) amp; amp; ; dis(c-gt;x,c-gt;y,p[1].x,p[1].y) lt; dis(d-gt;x,d-gt;y,p[1]. x, p[1].y)) //Si está en línea recta, pon el más alejado al frente
return 1;
else return -1; p >
}
PD:
La función qsort está incluida en el archivo de encabezado de lt;stdlib.hgt;, y strcmp está incluida en el archivo de encabezado de lt; cadena.hgt; ri