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

請參閱

參考

搜尋和排序

bsearch

_lsearch