L'utilisation et la pratique de qsort en langage C

1. Utilisation de base de qsort

Routine En-tête obligatoire Compatibilité
qsort <stdlib.h> et <search.h> ANSI, Win 95, Win NT

usage:

void qsort (void * base, size_t num, size_t width, int (__cdecl * compare) (const void * elem1, const void * elem2));

Quatre paramètres:
1.void * base: l'adresse du tableau à trier, c'est-à-dire le nom du tableau
2.size_t num: le nombre d'éléments à trier dans le tableau
3.size_t width: le nombre d'octets occupés par each element
4.int (__cdecl * compare) (const void * elem1, const void * elem2): pointeur de fonction personnalisé, utilisé pour déterminer l'ordre de tri (les utilisateurs doivent définir une fonction de comparaison), la méthode de tri par défaut est ascendante

valeur de retour:

Valeur de retour La description
<0 elem1 inférieur à elem2
= 0 elem1 équivalent à elem2
> 0 elem1 supérieur à elem2

1. Un problème de tri simple pour trier le tableau int
, ici est implémenté avec la fonction qsort

#include<stdio.h>
#include<stdlib.h>
int cmp(const void* p1, const void* p2)//形参格式不能改
{
    
     
	return(*(int*)p2)-(*(int*)p1)); 	    //将数组元素降序排列
	 
	// return((*(int*)p1) - (*(int*)p2);     将数组元素升序排列
 
}
int main()
{
    
    
	int a[40], n, i;
	scanf("%d", &n);
	for (i = 0; i < n; i++)
	{
    
    
		scanf("%d", &a[i]);
	}
	qsort(a, n, sizeof(a[0]), cmp);
	for (i = 0; i < 5; i++)
	{
    
    
		printf("%d ", a[i]);
	}

}

2. Triez la chaîne de
caractères

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
int cmp(const void* p1, const void* p2)
{
    
    
	return((*(char*)p1) - (*(char*)p2));
}
bool b(char* s, char* t)
{
    
    
	int ls = strlen(s);
	int lt = strlen(t);
	if (ls != lt)
	{
    
    
		return false;
	}
	qsort(s, ls, sizeof(s[0]), cmp);
	qsort(t, lt, sizeof(t[0]), cmp);
	if (strcmp(s, t) == 0)
	{
    
    
		return true;
	}
}
int main()
{
    
    
	char s[40], t[40];
	gets(s);
	gets(t);
	if (b(s, t))
	{
    
    
		printf("true");
	}
	else
	{
    
    
		printf("false");
	}
	
}

3. Tri du tableau char.
Semblable au type de tableau int, il peut être converti en char * lors de la conversion de type

Quatre. Trier le double tableau

#include<stdio.h>
#include<stdlib.h>
int cmp(const void* p1, const void* p2)
{
    
    
	double* a = (double*)p1;
	double* b = (double*)p2;
	return *a > * b ? 1 : -1;
}
int main()
{
    
    
	double a[40];
	qsort(a, 40, sizeof(a[0]), cmp);
}

L'opérateur ternaire doit être utilisé pour le type virgule flottante ou double, car si vous utilisez la soustraction comme le type entier, s'il s'agit de deux nombres proches, il peut renvoyer un petit nombre décimal (supérieur à -1, inférieur à 1) et le retour la valeur de cmp est de type int, donc la décimale sera renvoyée à 0, le système la considère comme égale et perd la relation de taille d'origine

Je suppose que tu aimes

Origine blog.csdn.net/DR5200/article/details/111087192
conseillé
Classement