<<
>>

4.4 Коды для стандартной реализации быстрого поиска

#include

#define MAXSTACK (sizeof(size_t) * CHAR_BIT)

static void exchange(void *a, void *b, size_t size) {

size_t i;

/******************

* exchange a,b *

******************/

for (i = sizeof(int); i > 1;

P = lb + offset - offset % size;

exchange (lb, P, size);

/* partition into two segments */

i = lb + size;

j = ub;

while (1) {

while (i < j && compar(lb, i) > 0) i += size;

while (j >= i && compar(j, lb) > 0) j -= size;

if (i >= j) break;

exchange (i, j, size);

j -= size;

i += size;

}

/* pivot belongs in A[j] */

exchange (lb, j, size);

m = j;

/* keep processing smallest segment, and stack largest */

if (m - lb lb) {

lbStack[sp] = lb;

ubStack[sp++] = m - size;

}

lb = m + size;

}

}

}

}

<< | >>
Источник: Томас Ниман. Сортировка и поиск: Рецептурный справочник. 1995

Еще по теме 4.4 Коды для стандартной реализации быстрого поиска: