qsort
執行快速排序。 更安全版本之這個函式是可使用; see qsort_s.
void qsort(
void *base,
size_t num,
size_t width,
int (__cdecl *compare )(const void *, const void *)
);
參數
base
目標陣列的開頭。num
陣列中元素的大小。width
項目大小,以位元組為單位。compare
對使用者提供的常式,會比較兩個陣列項目,並傳回值,指定兩者的關聯性的指標。
備註
qsort函式實作快速排序演算法排序陣列的num項目,每個width個位元組。 引數base是指向基底陣列會依序排列。 qsort藉由使用已排序的項目將會覆寫此陣列。
qsort呼叫compare例行至少有一個時間期間排序,和每次呼叫時,將指標傳遞至兩個陣列項目。
compare( (void *) & elem1, (void *) & elem2 );
常式比較項目,並且傳回下列值之一。
比較函式傳回值 |
描述 |
---|---|
< 0 |
elem1小於elem2 |
0 |
elem1對等用法elem2 |
> 0 |
elem1大於elem2 |
陣列會依序遞增的順序,所定義的比較函式。 若要排序陣列遞減順序排序,請反轉,因為 「 大於 」 與 「 小於 」 中的比較函式。
這個函式會驗證它的參數。 如果compare或num是NULL,或是否base是NULL和 *num不是零,或是否width小於零,無效的參數處理常式會叫用,如所述參數驗證。 如果執行則允許繼續執行,則函數會傳回與errno設定為 [ EINVAL。
需求
常式 |
所需的標頭 |
---|---|
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 );
}
.NET Framework 對等用法
System::Collections::ArrayList::Sort