Udostępnij za pośrednictwem


quicksort

Wykonuje szybkie sortowanie.Bardziej bezpieczna wersja ta funkcja jest dostępna; see qsort_s.

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

Parametry

  • base
    Początek tablicy docelowej.

  • num
    Rozmiar tablicy elementów.

  • width
    Element rozmiar w bajtach.

  • compare
    Wskaźnik do rutynowych dostarczone przez użytkownika, który porównuje dwa elementy tablicy i zwraca wartość, która określa ich relacji.

Uwagi

qsort Funkcji implementuje algorytm szybkiego sortowania, aby posortować obiekt array z num elementów, każdy z width bajtów.Argument base jest wskaźnik do podstawy tablicy, które mają być sortowane.qsortpowoduje zastąpienie tej tablicy przy użyciu sortowane elementy.

qsortwywołania compare rutynowych jednej lub więcej razy podczas sortowania i przekazuje wskaźniki do dwóch elementów tablicy na każde wywołanie.

compare( (void *) & elem1, (void *) & elem2 );

Rutynowe porównuje elementy i zwraca jedną z następujących wartości.

Porównać wartość zwracana funkcji

Opis

< 0

elem1mniej niżelem2

0

elem1odpowiednikelem2

> 0

elem1większe niżelem2

Tablicy jest sortowany rosnąco, zgodnie z definicją funkcji porównania.Aby posortować obiekt array, w kolejności malejącej, należy odwrócić poczucie "większy niż" i "mniejszy niż" w funkcji porównania.

Funkcja ta sprawdza poprawność jego parametry.Jeśli compare lub num jest NULL, lub jeśli base jest NULL i *num jest różna od zera, lub jeśli width jest mniejsza niż zero, nieprawidłowy parametr wywoływana jest funkcja obsługi, zgodnie z opisem w Sprawdzanie poprawności parametru.Jeśli wykonanie mogą w dalszym ciągu, funkcja zwraca i errno jest ustawiona na EINVAL.

Wymagania

Rozpoczęto wykonywanie procedury

Wymaganego nagłówka

qsort

<stdlib.h> i <search.h>

Aby uzyskać dodatkowe informacje o zgodności, zobacz Zgodność.

Przykład

// crt_qsort.c
// arguments: every good boy deserves favor

/* This program reads the command-line
 * parameters and uses qsort to sort them. It
 * then displays the sorted arguments.
 */

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int compare( const void *arg1, const void *arg2 );

int main( int argc, char **argv )
{
   int i;
   /* Eliminate argv[0] from sort: */
   argv++;
   argc--;

   /* Sort remaining args using Quicksort algorithm: */
   qsort( (void *)argv, (size_t)argc, sizeof( char * ), compare );

   /* Output sorted list: */
   for( i = 0; i < argc; ++i )
      printf( " %s", argv[i] );
   printf( "\n" );
}

int compare( const void *arg1, const void *arg2 )
{
   /* Compare all of both strings: */
   return _stricmp( * ( char** ) arg1, * ( char** ) arg2 );
}
  

Odpowiednik w programie .NET Framework

System::Collections::ArrayList::sort

Zobacz też

Informacje

Wyszukiwanie i sortowanie danych

bWyszukaj

_lsearch