Aracılığıyla paylaş


qsort

Hızlı bir sıralama gerçekleştirir. Bu işlevin daha güvenli bir sürümü kullanılabilir; bkz qsort_s. .

Sözdizimi

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

Parametreler

base
Hedef dizinin başlangıcı.

number
Öğelerdeki dizi boyutu.

width
Bayt cinsinden öğe boyutu.

compare
İki dizi öğesini karşılaştıran ve ilişkilerini belirten bir değer döndüren, kullanıcı tarafından sağlanan yordamın işaretçisi.

Açıklamalar

işlevi, qsort baytların her width biri olan bir öğe dizisini number sıralamak için bir hızlı sıralama algoritması uygular. Bağımsız değişken base , sıralanacak dizinin tabanına işaret eden bir işaretçidir. qsort sıralanmış öğeleri kullanarak bu dizinin üzerine yazar.

qsortcompare sıralama sırasında yordamı bir veya daha fazla kez çağırır ve işaretçileri her çağrıdaki iki dizi öğesine geçirir. compare İki öğe aynıysa, sonuçta elde edilen sıralanmış dizideki düzenleri belirtilmez.

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

yordamı, öğeleri karşılaştırır ve aşağıdaki değerlerden birini döndürür.

İşlev dönüş değerini karşılaştırma Açıklama
< 0 elem1 küçüktür elem2
0 elem1 eşdeğer elem2
> 0 elem1 büyüktür elem2

Dizi, karşılaştırma işlevi tarafından tanımlandığı gibi artan düzende sıralanır. Bir diziyi azalan düzende sıralamak için karşılaştırma işlevinde "büyüktür" ve "küçüktür" hissini ters çevirin.

Bu işlev parametrelerini doğrular. veya compare ise veya ise base NULL veya sıfır değilse veya number sıfırdan küçüksewidth, Parametre doğrulama bölümünde açıklandığı gibi geçersiz parametre işleyicisi çağrılır.NULLnumber Yürütmenin devam etmesi için izin verilirse işlev döner ve errno olarak EINVALayarlanır.

Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.

Gereksinimler

Yordam Gerekli başlık
qsort <stdlib.h> ve <search.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Örnek

// 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 );
}
boy deserves every favor good

Ayrıca bkz.

Arama ve sıralama
bsearch
_lsearch