qsort
来源:互联网 发布:pon网络光纤监测系统 编辑:程序博客网 时间:2024/06/05 14:06
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 elementsize bytes long, using the compar function to determine the order.The sorting algorithm used by this function compares pairs of elements by calling the specifiedcompar function with pointers to them as argument.
The function does not return any value, but modifies the content of the array pointed bybase 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 p2
For types that can be compared using regular relational operators, a general compar function may look like:123456
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
noneExample
12345678910111213141516171819
/* 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, callingcompar approximatelynum*log2(num)
times.Data races
The function accesses and/or modifies the num elements in the array pointed bybase.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 ifcomp does not behave as described above, it causes undefined behavior. 0 0
- QSORT
- qsort
- QSort
- qsort
- qsort
- qsort
- qsort
- qsort
- qsort
- qsort
- qsort
- qsort
- qsort
- qsort
- qsort
- qsort
- qsort
- qsort
- 英文论文中“such as, for example, e.g., i.e., etc., et al. ”的用法分析
- springmvc+velocity+ Rest Services(xml,json)实例
- Android自定义控件---继承Linearlayout
- 揭密extern "C"
- requestWindowFeature使用详解
- qsort
- Android Material Design之Toolbar与Palette实践
- ios内购调试时出现“无法连接到itunes Store”解决办法
- A look at WeChat security
- Android 自定义View (一)
- java基础复习
- Android推送进阶课程学习笔记
- Windows 临界区,内核事件,互斥量,信号量。
- Java基础之继承,抽象类,接口