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

陣列是以比較函式所定義的遞增順序排序。 若要以遞減順序排序陣列,請將比較函式中的「大於」和「小於」意義反轉。

這個函式會驗證它的參數。 如果 comparenumberNULL ,或 base 如果 是 NULLnumber 零,或 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

另請參閱

搜尋和排序
bsearch
_lsearch