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.
qsort
compare
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.NULL
number
Yürütmenin devam etmesi için izin verilirse işlev döner ve errno
olarak EINVAL
ayarlanı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