qsort
執行快速排序。 此函式有更安全的版本可供使用;請參閱 qsort_s
。
語法
void qsort(
void *base,
size_t number,
size_t width,
int (__cdecl *compare )(const void *, const void *)
);
參數
base
目標陣列的開頭。
number
陣列大小 (以項目計)。
width
元素大小 (以位元組為單位)。
compare
使用者提供之常式的指標,該常式比較兩個陣列元素,然後傳回一個指定其關聯性的值。
備註
qsort
函式會實作快速排序演算法,來排序 number
項目陣列,每個項目 width
個位元組。 base
引數是要排序之陣列基底的指標。 qsort
使用已排序的項目來覆寫這個陣列。
qsort
在搜尋時會呼叫 compare
常式一或多次,每次呼叫會將指標傳遞至兩個陣列元素。 如果 compare
表示兩個元素相同,則結果排序數位中的順序不會指定。
compare(const void *elem1, const void *elem2);
常式會比較這些項目,然後傳回下列其中一個值。
比較函式傳回值 | 描述 |
---|---|
< 0 | elem1 小於 elem2 |
0 | elem1 相當於 elem2 |
> 0 | elem1 大於 elem2 |
陣列是以比較函式所定義的遞增順序排序。 若要以遞減順序排序陣列,請將比較函式中的「大於」和「小於」意義反轉。
這個函式會驗證它的參數。 如果 compare
或 number
為 NULL
,或 base
如果 是 NULL
非number
零,或 width
如果 小於零,則會叫用無效的參數處理程式,如參數驗證中所述。 如果允許繼續執行,函式會傳回 ,並 errno
設定為 EINVAL
。
根據預設,此函式的全域狀態會限定於應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。
需求
常式 | 必要的標頭 |
---|---|
qsort |
<stdlib.h> 和 <search.h> |
如需相容性詳細資訊,請參閱相容性。
範例
// 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