7 / 7 / 9
Регистрация: 25.02.2013
Сообщений: 237
1

Сортировка слияниеим без рекурсии

20.10.2014, 16:45. Показов 3542. Ответов 3
Метки нет (Все метки)

Нужна сортировка слиянием без использования рекурсии.
Помогите ...
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2014, 16:45
Ответы с готовыми решениями:

Нестандартная быстрая сортировка (без рекурсии)
Помогите пожалуйста, нужно написать программу для одномерного массива, с помощью быстрой сотрировки...

Сортировка с использованием рекурсии
Здравствуйте. Задание : Написать рекурсивную функцию сортировки массива. Помогите пожалуйста...

Рекурсия без рекурсии
Как известно с рекурсией связана маленькая скорость и проблема переполнения стека. Ее можно...

Разложение без рекурсии!
Вот сижу я такой и думая над одной задачкой замечаю одну закономерность в разложении чисел которая...

3
7 / 7 / 9
Регистрация: 25.02.2013
Сообщений: 237
22.10.2014, 03:06  [ТС] 2
Восходящая сортировка, нет ни у кого кода?
0
7 / 7 / 9
Регистрация: 25.02.2013
Сообщений: 237
23.10.2014, 15:11  [ТС] 3
Аппп
0
Студент
121 / 132 / 39
Регистрация: 07.04.2011
Сообщений: 503
23.10.2014, 15:33 4
Из гугла: вот
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 
template <class T>
T* merge(T *m1, T* m2, int l1, int l2)
{
    T* ret = new T[l1+l2];
    int n = 0;
    // Сливаем массивы, пока один не закончится
    while (l1 && l2) {
        if (*m1 < *m2) {
            ret[n] = *m1;
            m1++;
            --l1;
        } else {
            ret[n] = *m2;
            ++m2;
            --l2;
        }
        ++n;
    }
    // Если закончился первый массив
    if (l1 == 0) {
        for (int i = 0; i < l2; ++i) {
            ret[n++] = *m2++;
        }
    } else { // Если закончился второй массив
        for (int i = 0; i < l1; ++i) {
            ret[n++] = *m1++;
        }
    }
    return ret;
}
 
// Функция восходящего слияния
template <class T>
void mergeSort(T * mas, int len)
{
    int n = 1, l, ost;
    T * mas1;
    while (n < len) {
        l = 0;
        while (l < len) {
            if (l + n >= len) break;
            ost = (l + n * 2 > len) ? (len - (l + n)) : n;
            mas1 = merge(mas + l, mas + l + n, n, ost);
            for (int i = 0; i < n + ost; ++i)
                mas[l+i] = mas1[i];//тут нужно что-то поменять, потому что это лишнее копирование, и оно увеличивает время работы алгоритма в два раза
            delete [] mas1;
            l += n * 2;
        }
        n *= 2;
    }
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.10.2014, 15:33
Помогаю со студенческими работами здесь

О 8 ферзях(Без рекурсии)
Пытаюсь сделать задачу о 8 ферзях без рекурсии. Сделал набросок, но работает как то криво. В чем...

Быстрая сортировка с помощью рекурсии
Пытался написать алгоритм быстрой сортировки с помощью рекурсии, но данная программа наотрез ...

Сортировка массива с использованием рекурсии
Нужно отсортировать массив в диапазоне от a до b с помощью рекурсии, что я делаю не так?...

Создание дерева без рекурсии
Можно использовать стеки и очереди. Дерево строится из данных с файла. К примеру: ...

Функция Аккермана без рекурсии
Возможно сделать функцию Аккермана НЕ рекурсивно, а циклически? Сложность с которой я столкнулся в...

Функция Аккермана без рекурсии
Задача: A(0, n) = n + 1; A(m, 0) = A(m–1, 1); при m &gt; 0; A(m, n) = A(m–1, A(m, n–1)); при m &gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru