INFO: Classificar estruturas com a função qsort() C

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 73853
Aviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.
Sumário
Qsort() de função de biblioteca de tempo de execução Microsoft C e QuickC é útil para classificação de dados; no entanto, é necessário fornecer qsort() uma função de comparação para o tipo de dados que estão sendo classificados. Isso às vezes, causa confusão quando esse tipo é uma estrutura. O programa de exemplo abaixo ilustra como usar qsort() para classificar uma matriz de estruturas.
Mais Informações
No código de exemplo, a estrutura animal contém um inteiro, que é a chave para ser classificado, e uma matriz de caracteres que contém o nome do animal. A função compare() recebe dois ponteiros para digitar struct animal e retorna -1, 1 ou 0 (zero) se o primeiro elemento é menor que, maior ou igual ao primeiro elemento, respectivamente.

Código de exemplo

/* Compile options needed: none * * This example program uses the C run-time library function qsort() * to sort an array of structures. */ #include <stdio.h>#include <stdlib.h>typedef int (*compfn)(const void*, const void*);struct animal { int  number;                char name[15];              };struct animal array[10]  = { {  1, "Anaconda"    },                             {  5, "Elephant"    },                             {  8, "Hummingbird" },                             {  4, "Dalmatian"   },                             {  3, "Canary"      },                             {  9, "Llama"       },                             {  2, "Buffalo"     },                             {  6, "Flatfish"    },                             { 10, "Zebra"       },                             {  7, "Giraffe"     }  };void printarray(void);int  compare(struct animal *, struct animal *);void main(void){   printf("List before sorting:\n");   printarray();   qsort((void *) &array,              // Beginning address of array   10,                                 // Number of elements in array   sizeof(struct animal),              // Size of each element   (compfn)compare );                  // Pointer to compare function   printf("\nList after sorting:\n");   printarray();}int compare(struct animal *elem1, struct animal *elem2){   if ( elem1->number < elem2->number)      return -1;   else if (elem1->number > elem2->number)      return 1;   else      return 0;}void printarray(void){   int i;   for (i = 0; i < 10; i++)      printf("%d:  Number %d is a %s\n",               i+1, array[i].number, array[i].name);}				

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 73853 - Última Revisão: 12/12/2003 14:52:41 - Revisão: 3.0

The C Run-Time (CRT)

  • kbmt kbcode kbcrt kbinfo KB73853 KbMtpt
Comentários