qsort.c

来自「julius version 4.12.about sound recognit」· C语言 代码 · 共 85 行

C
85
字号
/** * @file   qsort.c *  * <JA> * @brief  $B%/%$%C%/%=!<%H!J:FF~2DG=!K(B * </JA> *  * <EN> * @brief  quick sort (re-entrant) * </EN> *  * @author Akinobu Lee * @date   Wed Feb 13 14:34:45 2008 *  * $Revision: 1.1 $ *  *//**  * Internal quick sort function. *  * @param left [in] left bound element * @param right [in] right bound element * @param size [in] size of an element * @param compare [in] comparison function * @param pointer [in] data pointer which will be passed to comparison function *  */static voidinternal_quick_sort(char *left, char *right, int size, int (*compare)(const void *, const void *, void *), void *pointer){  char *p = left;  char *q = right;  char *t = left;  while (1) {    while ((*compare)(p, t, pointer) < 0)      p += size;    while ((*compare)(q, t, pointer) > 0)      q -= size;    if (p > q)      break;    if (p < q) {      int i;      for (i = 0; i < size; i++) {	char x = p[i];	p[i] = q[i];	q[i] = x;      }      if (t == p)	t = q;      else if (t == q)	t = p;    }    p += size;    q -= size;    if (p > q) break;  }  if (left < q)    internal_quick_sort(left, q, size, compare, pointer);  if (p < right)    internal_quick_sort(p, right, size, compare, pointer);}/** * Quick sort that will pass data poitner to comparison function for re-entrant * usage. *  * @param base [i/o] pointer to the data array * @param count [in] number of elements in the array * @param size [in] size of an element in bytes * @param compare [in] comparison function * @param pointer [in] data which will be passed to comparison function *  */voidqsort_reentrant(void *base, int count, int size, int (*compare)(const void *, const void *, void *), void *pointer){  if (count > 1) {    internal_quick_sort((char *) base, (char *) base + (count-1)*size, size, compare, pointer);  }}/* end of file */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?