Пример #1
0
void __merge_sort(T *data, T *reg, int start, int end) {
    if(start >= end) {
        return;
    }

    int length = end - start;
    int mid = (end + start) / 2;
    int start1 = start, end1 = mid;
    int start2 = mid + 1, end2 = end;
    __merge_sort(data, reg, start1, end1);
    __merge_sort(data, reg, start2, end2);

    int index = start;
    while(start1 <= end1 && start2 <= end2) {
        reg[index ++] = (data[start1] < data[start2]) ? data[start1 ++] : data[start2 ++];
    }
    while(start1 <= end1) {
        reg[index ++] = data[start1 ++];
    }
    while(start2 <= end2) {
        reg[index ++] = data[start2 ++];
    }
    for(index = start; index <= end; index ++) {
        data[index] = reg[index];
    }
}
Пример #2
0
static void __merge_sort (struct aux_data* aux, size_t start, size_t end)
{
    if (start < (end - 1)) {
        size_t middle = (start + end) >> 1;
        __merge_sort(aux, start, middle);
        __merge_sort(aux, middle, end);
        merge(aux, start, middle, end);
    }
Пример #3
0
void __merge_sort(int *arr, int p, int r)
{
	int q;

	if (p >= r)
		return;

	q = (p + r) / 2;
	__merge_sort(arr, p, q);
	__merge_sort(arr, q + 1, r);
	__merge(arr, p, q, r);
}
Пример #4
0
void merge_sort(int *arr, int size)
{
	__merge_sort(arr, 0, size - 1);
}
Пример #5
0
void binaryMergingSort(T *data, int length){
    T *reg = new T[length];
    __merge_sort(data, reg, 0, length-1);
}