void qsort (void* base, size_t num, size_t size, int (*compar)(const void*,const void*)
来源:互联网 发布:淘宝店铺售假多久恢复 编辑:程序博客网 时间:2024/05/21 13:57
function <cstdlib>
qsort
void qsort (void* base, size_t num, size_t size, int (*compar)(const void*,const void*));
Sort elements of array
Sorts the num elements of the array pointed by base, each element size bytes long, using the compar function to determine the order.
The sorting algorithm used by this function compares pairs of elements by calling the specified compar function with pointers to them as argument.
The function does not return any value, but modifies the content of the array pointed by base reordering its elements as defined by compar.
The order of equivalent elements is undefined.
Parameters
base
Pointer to the first object of the array to be sorted, converted to a void*.
num
Number of elements in the array pointed by base.
size_t is an unsigned integral type.
size
Size in bytes of each element in the array.
size_t is an unsigned integral type.
compar
Pointer to a function that compares two elements.
This function is called repeatedly by qsort to compare two elements. It shall follow the following prototype:
int compar (const void* p1, const void* p2);Taking two pointers as arguments (both converted to const void*). The function defines the order of the elements by returning (in a stable and transitive manner):return value meaning<0 The element pointed by p1 goes before the element pointed by p20 The element pointed by p1 is equivalent to the element pointed by p2>0 The element pointed by p1 goes after the element pointed by p2For types that can be compared using regular relational operators, a general compar function may look like:
int compareMyType (const void * a, const void * b) { if ( *(MyType*)a < *(MyType*)b ) return -1; if ( *(MyType*)a == *(MyType*)b ) return 0; if ( *(MyType*)a > *(MyType*)b ) return 1; }
Return Value
none
Example
/* qsort example */#include <stdio.h> /* printf */#include <stdlib.h> /* qsort */int values[] = { 40, 10, 100, 90, 20, 25 };int compare (const void * a, const void * b){ return ( *(int*)a - *(int*)b );}int main (){ int n; qsort (values, 6, sizeof(int), compare); for (n=0; n<6; n++) printf ("%d ",values[n]); return 0;}
Edit & Run
Output:
10 20 25 40 90 100
Complexity
Unspecified, but quicksorts are generally linearithmic in num, on average, calling compar approximately num*log2(num) times.
Data races
The function accesses and/or modifies the num elements in the array pointed by base.
Exceptions (C++)
If comp does not throw exceptions, this function throws no exceptions (no-throw guarantee).
If base does not point to an array of at least num*size bytes, or if comp does not behave as described above, it causes undefined behavior.
- void qsort (void* base, size_t num, size_t size, int (*compar)(const void*,const void*)
- void *memcpy(void *pvTo, const void *pvFrom, size_t size)
- void* mymemcpy( void* dest, const void* src, size_t count )
- void * memset ( void * ptr, int value, size_t num );
- 快速排序,void Qsort(void *base,int nelem,int width, int (*fcmp)(const void *,const void *))的实现。
- void* memcpy(void* dst, const void* src, int size)
- size_t, wchar_t, int, long, void *
- 用C语言实现函数void * memmove(void *dest, const void *src, size_t n)。
- 用C语言实现函数void * memmove(void *dest, const void *src, size_t n)
- 用C语言实现函数void * memmove(void *dest,const void *src,size_t n)
- 用C语言实现函数void * memmove(void *dest,const void *src,size_t n)
- 用C语言实现一个公用库函数void * memmove(void *dest,const void *src,size_t n)
- 用C语言实现函数void * memmove(void *dest, const void *src, size_t n)
- 用C语言实现函数void * memmove(void *dest,const void *src,size_t n)
- memcpy函数的使用总结void *memcpy(void *dest, const void *src, size_t n);
- void *memmove(void *dest, const void *src, size_t n) 的实现
- could be 'void *operator new(size_t,const std::nothrow_t &) throw()'
- void* memchr( void *pv, unsigned char ch, size_t size )
- 递归函数
- 原型与闭包分析
- Mysql索引详解
- 3大致命bug
- Log4J配置详解
- void qsort (void* base, size_t num, size_t size, int (*compar)(const void*,const void*)
- TCP序列号和确认号详解
- 权限管理_CPS_FUNC_PERMISSION_DATA 2
- javaee学习之路(三)HTTP协议学习
- Android用canvas画随意方向箭头
- ajax原理讲解
- 下拉刷新和上拉加载的原理
- Oracle Data Guard 理论知识
- Maven3路程(一)环境搭建