qsort

qsort函数C语言编译器函数库自带的排序函数。qsort 的函数原型是void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*)); 是base所指数组进行排序。qsort函数包含在C 标准库 - <stdlib.h>中。

void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))

base-- 指向要排序的数组的第一个元素的指针。

nitems-- 由 base 指向的数组少罪泪乌中元素的个数。

size-- 数组中每个元素的大小,以字节为单位。谜拘踏

compar-- 用来比较两个元素的函数,即函数指针(回调函数)

回调函数:

回调函数就是一个通过函数指针调用的函数。如果把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,就说这是回调函数。

compar参数

compar参数指向一个比较两个元素的函数。比较函数的原耻弃阀型应该像下面这样。注意两个形参必须是const void *型,同时在调用compar 函数(compar实质为函数指针,这里称它所指向的函数也为compar)时,传入的实参也必须转换成const void *型。在compar函数内部会将const void *型转换成实际趋热府类型。

int compar(const void *p1, const void *p2);

如果compar返回值小于0(< 0),那么p1所指向元素会被排在p2所指向元素的左面;

如果compar返回值等于0(= 0),那么p1所指向元素与p2所指向旬断盛艰元素的顺序不确定;

如果compar返回值大于0(> 0),那么p1所指向元素会被排在p2所指向元素的右面。

使用排序例程进行排序。

该函数不返回任灶多何值。

头文件:stdlib.h;

#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 );

}

qsort函数的用法说明如下:

例:qsort(a,1000,sizeof(int),comp);

其中comp函数应写为:

上面是由小到大排序,return *(int *)b - *(int *)a; 为由大到小排序。

以下为compare函数原型 //comp

compare( (void *) & elem1, (void *) & elem2 );

Compare 函数的返回值

描述

< 0

elem1将被排在elem2前面

0

elem1 等于 elem2

> 0

elem1 将被排在elem2后面

(1)对一维数组的排序实例(从小到大排序):

对一个二维数组进行排序:

int a[1000][2]; 其中按照a[0]的大小进行一个整体的排序,其中a[1]必须和a[0]一起移动交换。//即第一行和第二行(a[0]和a[1]分别代表第一行和第二行的首地址)。使用库函数排序的代码量并不比用冒泡排序法小,但速度却快很多。

(2)对字符串进行排序

(3)按结构体中某个关键字排序(对结构体一级排序):

按结构体中多个关键字排序(对结构体多级排序)[以二级为例]:

对结构体中字符串进行排序:

(4)计算几何中求凸包的Comp

相关词汇