qsort.c

来自「linux内核」· C语言 代码 · 共 43 行

C
43
字号
/* * qsort.c * * This is actually combsort.  It's an O(n log n) algorithm with * simplicity/small code size being its main virtue. */#include <stddef.h>#include <string.h>static inline size_t newgap(size_t gap){  gap = (gap*10)/13;  if ( gap == 9 || gap == 10 )    gap = 11;  if ( gap < 1 )    gap = 1;  return gap;}void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)){  size_t gap = nmemb;  size_t i, j;  char *p1, *p2;  int swapped;  do {    gap = newgap(gap);    swapped = 0;        for ( i = 0, p1 = base ; i < nmemb-gap ; i++, p1 += size ) {      j = i+gap;      if ( compar(p1, p2 = (char *)base+j*size) > 0 ) {	memswap(p1, p2, size);	swapped = 1;      }    }  } while ( gap > 1 || swapped );}

⌨️ 快捷键说明

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