Можно ли в сортировках слиянием( А так же Хора и бинарного поиска) использовать связной список через индексирование?

T& operator[] (const int index)
{
    int i = 0;

    Node<T>* pointer = this->head;
    while (pointer != nullptr)
    {
        if (i == index) {
            return pointer->data;
        }
        else {
            pointer = pointer->next;
            i++;
        }
    }
    return head->data;
}
void _merge(List<T> a, int low, int mid, int high) {
    int i, j;
    T* tmp = new T[high - low + 1];
    int n = 0;

    i = low;
    j = mid + 1;

    while (i <= mid && j <= high) {
        if (!(a[i] < a[j])) {
            tmp[n++] = a[i++];
        }
        else {
            tmp[n++] = a[j++];
        }
    }

    while (i <= mid) {
        tmp[n++] = a[i++];
    }

    while (j <= high) {
        tmp[n++] = a[j++];
    }

    for (i = 0; i < n; i++) {
        a[low++] = tmp[i];
    }

    delete[] tmp;
}

void merge_sort(List<T> a, int n) {
    int seg = 1;
    int index;

    while (seg < n) {
        index = 0;

        while (index <= n - seg * 2) {
            _merge(a, index, index + seg - 1, index + seg * 2 - 1);
            index += seg * 2;
        }

        if (index + seg < n) {
            _merge(a, index, index + seg - 1, n - 1);
            index += seg * 2;
        }

        seg += seg;
    }
}

Ответы (0 шт):