Форум программистов, компьютерный форум, киберфорум
Наши страницы
Алгоритмы
Войти
Регистрация
Восстановить пароль
 
Misha_prog
0 / 0 / 1
Регистрация: 15.04.2013
Сообщений: 184
1

Не правильно рабоатет сортировка слиянием

10.02.2015, 12:14. Просмотров 230. Ответов 0
Метки нет (Все метки)

Всем привет!!! Битый час бьюсь над алгоритмом, но понять не могу в чем ошибка посоветуйте пожалуйста!!!
вот код функций
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
void merge(int * a, int bottom, int middle, int up);
 
void mergeSort(int * a, int bottom, int up) {
    if (up > bottom) {
        int  middle = (up + bottom) / 2;
        mergeSort(a, bottom, middle);
        mergeSort(a, middle + 1, up);
        merge(a, bottom, middle, up);
    }
}
 
void merge(int * a, int bottom, int middle, int up) {
    int leftSize = middle - bottom  + 1;
    int rightSize = up - middle;
    int * left = new int[leftSize];
    int * right = new int[rightSize];
    for (int i = 0; i < leftSize; ++i) {
        left[i] = a[bottom + i];
    }
    for (int i = 1; i < rightSize; ++i) {
        right[i] = a[middle + i];
    }
    int i = 0;
    int j = 0;
 
    for (int k = bottom; k < up; ++k) {
        if (i < leftSize && j < rightSize){
            if (left[i] < right[j]) {
                a[k] = left[i];
                ++i;
            }
            else {
                a[k] = right[j];
                ++j;
            }
        }
        else if (i < leftSize && j >= rightSize) {
            a[k] = left[i];
            ++i;
        }
        else {
            a[k] = right[j];
            ++j;
        }
    }
}
вот тест который у меня не проходит,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void testMergeSort() {
    int a[3];
    a[0] = 5;
    a[1] = 3;
    a[2] = 1;
    mergeSort(a, 0, 3);
    PrintArray(a, 3);
    if (a[0] != 1 || a[1] != 3 || a[2] != 5) {
        throw std::exception("error merge");
    }
}
int _tmain(int argc, _TCHAR* argv[])
{
#ifdef _DEBUG
    try {
        testMergeSort();
    }
    catch (std::exception & e) {
        std::cout << e.what() << std::endl;
    }
#endif
    return 0;
}
вроде бы пытаюсь сделать по тому как написано в книге, но не получается....
помогите пожалуйста!!! Всем спасибо за внимание и помощь!!!
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2015, 12:14
Ответы с готовыми решениями:

Сортировка слиянием
Писал сортировку слиянием и запутался в индексации массивов. Работает только для массивов четной...

Сортировка слиянием на C#
Короче по всему интернету в основном летает данная реализация данной сортировки: static Int32...

Сортировка естественным слиянием!!!
Всем Привет!!! Помогите, пожалуйста, написать программу сортировки файлов, использующую алгоритм...

Внешняя сортировка сбалансированным многопутёвым слиянием.
Файл содержит записи размера 200 байт. одно из полей записи содержит ключ(ключи могут повторяться)...

Сортировка слиянием. В каком куске кода происходит сортировка и каким именно образом?
Помогите, пожалуйста, разобраться. Подскажите в каком куске кода происходит сортировка и каким...

0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2015, 12:14

Сортировка Слиянием vs Быстрая Сортировка - что лучше
Народ, помогите разобраться какой из методов сортировки лучше &quot;Сортировка Слиянием&quot; или &quot;Быстрая...

Сортировка слиянием. трехленточная сортировка. считывание из файла
Сделал только без считывания из файла, как это сделать. Нужна помощь. У меня считывается с клавы и...

2 сортировки: пирамидальная сортировка и сортировка слиянием
Реализовать два улучшенных алгоритма сортировки. Для каждого алгоритма вычислить показатель...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.