黄金雅蠛蝶 黄金雅蠛蝶
Dies
关注数: 48 粉丝数: 228 发帖数: 11,401 关注贴吧数: 33
自己实现的qsort函数(尾递归优化+手动建栈) void qsort(void* base,size_t cnt,size_t siz,int(*comp)(const void*,const void*)){       enum {MAXTOP=40};       typedef struct {size_t l,r;} TNode,*PNode;       PNode stack=(PNode)malloc(MAXTOP*sizeof(TNode)+siz*2),top=stack;       void *x=&stack[MAXTOP],*t=(void *)((size_t)x+siz);       size_t i,j;             base=(void*)((size_t)base-siz);            top->l=1;top->r=cnt;       while (top>=stack) {             while (top->l<top->r) {                   i=top->l;j=top->r;memcpy(x,(void*)((size_t)base+siz*((i+j)>>1)),siz);                   while (i<=j) {                         while (comp((void*)((size_t)base+i*siz),x)<0) ++i;                         while (comp((void*)((size_t)base+j*siz),x)>0) --j;                         if (i<=j) {                                   memcpy(t,(void*)((size_t)base+i*siz),siz);                                   memcpy((void*)((size_t)base+i*siz),(void*)((size_t)base+j*siz),siz);                                   memcpy((void*)((size_t)base+j*siz),t,siz);                                   ++i;--j;                                   }                         }                   if (top->r-i<=j-top->l) {
首页 1 2 3 4 5 6 下一页