Esempio n. 1
0
void Bid::sortFrom(int begin, int end, unsigned *tempArray) {
  if (begin < end) {
    int middle = (begin + end) / 2;
    sortFrom (begin, middle, tempArray);
    sortFrom (middle + 1, end, tempArray);
    merge (begin, middle + 1, end, tempArray);
  }
}
Esempio n. 2
0
void Bid::sort() {
  if (sorted) return;
	
  unsigned *tempArray = new unsigned[num_goods];
  sortFrom(0, num_goods-1, tempArray);
  delete[] tempArray;
	
  sorted = true;
}
Esempio n. 3
0
    list left = list_create();
    list right = list_create();
    void *pivot = list_getFrom(l, p);
    int i = 0;
    FOREACH(it, l) {
        void *val = VALUE(it);
        if (i != p) {
            if (sorter(val, pivot)) {
                list_push(left, val);
            } else {
                list_push(right, val);
            }
        }
        i++;
    }
    list r = sortFrom(left, sorter, 0, list_len(left));
    list_push(r, pivot);
    r = list_merge(r, sortFrom(right, sorter, 0, list_len(right)));
    list_destroy(left);
    list_destroy(right);
    return r;
}

list sortFrom(list l, sort_fn sorter, int s, int e) {
    switch (e - s) {
    case 0:
        return list_create();
    case 1:
        return sortOne(l, sorter, s, e);
    case 2:
        return sortTwo(l, sorter, s, e);