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