?
Ce document utilise Manuel du site Web PHP chinois Libérer
在頭文件<stdlib.h>中定義 | ||
---|---|---|
void qsort(void * ptr,size_t count,size_t size,int(* comp)(const void *,const void *)); | (1) | |
errno_t qsort_s(void * ptr,rsize_t count,rsize_t size,int(* comp)(const void *,const void *,void *),void * context); | (2) | (自C11以來) |
1)按照升序?qū)tr指向的給定數(shù)組進(jìn)行排序。 該數(shù)組包含大小字節(jié)的計(jì)數(shù)元素。 由comp指向的函數(shù)用于對(duì)象比較。
2)與(1)相同,不同之處在于附加上下文參數(shù)上下文傳遞給comp,并且在運(yùn)行時(shí)檢測到以下錯(cuò)誤并調(diào)用當(dāng)前安裝的約束處理函數(shù):
count
或size
大于RSIZE_MAX
ptr
或comp
是一個(gè)空指針(除非count
是零)
與所有邊界檢查函數(shù)一樣,只有當(dāng)__STDC_LIB_EXT1__由實(shí)現(xiàn)定義并且在包含stdlib.h之前用戶將__STDC_WANT_LIB_EXT1__定義為整數(shù)常量1時(shí),qsort_s才能保證可用。
如果comp
表示兩個(gè)元素是等價(jià)的,則它們?cè)诮Y(jié)果排序數(shù)組中的順序是未定義的。
PTR | - | 指向要排序的數(shù)組的指針 |
---|---|---|
count | - | 數(shù)組中元素的個(gè)數(shù) |
size | - | 數(shù)組中每個(gè)元素的大?。ㄒ宰止?jié)為單位) |
comp | - | 比較函數(shù),如果第一個(gè)參數(shù)小于第二個(gè)參數(shù),則返回負(fù)整數(shù)值;如果第一個(gè)參數(shù)大于第二個(gè)參數(shù),則返回正整數(shù)值;如果參數(shù)相等,則返回零。比較函數(shù)的簽名應(yīng)該等同于以下內(nèi)容:int cmp(const void * a,const void * b); 該函數(shù)不得修改傳遞給它的對(duì)象,并且在調(diào)用相同對(duì)象時(shí)必須返回一致的結(jié)果,而不管它們?cè)跀?shù)組中的位置。 |
context | - | 附加信息(例如,整理順序),作為第三個(gè)參數(shù)傳遞給comp |
1)(none)
2)成功時(shí)返回零,如果檢測到運(yùn)行時(shí)約束違規(guī),則返回非零
盡管有這個(gè)名字,C和POSIX標(biāo)準(zhǔn)都不需要使用快速排序來實(shí)現(xiàn)此功能,也不需要任何復(fù)雜性或穩(wěn)定性保證。
與其他邊界檢查函數(shù)不同,qsort_s
不會(huì)將零大小的數(shù)組視為運(yùn)行時(shí)約束沖突,而是在不更改數(shù)組的情況下成功返回(另一個(gè)接受零大小數(shù)組的函數(shù)bsearch_s
)。
直到qsort_s
,用戶qsort
經(jīng)常使用的全局變量傳遞附加的上下文的比較功能。
#include <stdio.h>#include <stdlib.h>#include <limits.h> int compare_ints(const void* a, const void* b){ int arg1 = *(const int*)a; int arg2 = *(const int*)b; if (arg1 < arg2) return -1; if (arg1 > arg2) return 1; return 0; // return (arg1 > arg2) - (arg1 < arg2); // possible shortcut // return arg1 - arg2; // erroneous shortcut (fails if INT_MIN is present)} int main(void){ int ints[] = { -2, 99, 0, -743, 2, INT_MIN, 4 }; int size = sizeof ints / sizeof *ints; qsort(ints, size, sizeof(int), compare_ints); for (int i = 0; i < size; i++) { printf("%d ", ints[i]); } printf("\n");}
輸出:
-2147483648 -743 -2 0 2 4 99
C11標(biāo)準(zhǔn)(ISO / IEC 9899:2011):
7.22.5.2 qsort函數(shù)(p:355-356)
K.3.6.3.2 qsort_s函數(shù)(p:609)
C99標(biāo)準(zhǔn)(ISO / IEC 9899:1999):
7.20.5.2 qsort函數(shù)(p:319)
C89 / C90標(biāo)準(zhǔn)(ISO / IEC 9899:1990):
4.10.5.2 qsort函數(shù)
bsearchbsearch_s(C11) | 在數(shù)組中搜索未指定類型的元素(函數(shù)) |
---|
| 用于qsort的C ++文檔 |