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,如果 baseNULLnumber 不为零,或者如果 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