Пример #1
0
int qs_partition(void *array, int *indexes, int start, int end, int pivot) {
    int j = start, i;

    qs_swap(array, indexes, pivot, end);
    for (i = start ; i < end ; i++) {
        if (indexes[i] <= indexes[end]) {
            qs_swap(array, indexes, i, j);
            j++;
        }
    }
    qs_swap(array, indexes, end, j);
    return j;
}
Пример #2
0
Файл: util.c Проект: asqz/tagger
static int qs_partition (void* items, int item_size, int l, int r, compare_proc proc, void* user_data)
{
   char* start = (char*)items;
   char* value = (start + r*item_size);
   char* ptr = (start + l*item_size);
   char* swap_ptr = ptr;

   while (ptr < value)
   {
      if (proc(ptr, value, user_data) < 0)
      {
         qs_swap(ptr, swap_ptr, item_size);
         swap_ptr += item_size;
      }

      ptr += item_size;
   }
   qs_swap(value, swap_ptr, item_size);

   return (swap_ptr - start)/item_size;
}