Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 15.12.2016
Сообщений: 32
1

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

24.03.2017, 05:19. Показов 1287. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include<stdio.h>
#include<iostream>
#define zn 7
int*sort(int array[], int min, int max);
int*sort1(int array[], int min, int middle, int mid, int max);
int main()
{
 
    int array[zn];
    for(int i = 0; i<=zn;i++)
    {
        std::cin >> array[i];
    }
    sort(array, 0, zn - 1);
    std::cout << array << std::endl;
    system("pause");
    return 0;
    
}
int*sort(int array[], int min, int max)
{
    if (max > min)
    {
        int middle = (max + min) / 2;
        sort(array, min, middle);
        sort(array, middle + 1, max);
        sort1(array, min, middle, middle + 1, max);
    }
    return array;
    
}
    int*sort1(int array[], int min, int middle, int mid, int max)
    {   
        int* buff = (int*)malloc(max);
        
        int i = min, j = mid, p = 0, t;
        bool kmin = false, kmax= false;
        if ((middle - min) % 2 == 1)
        {
            t = array[middle];
            kmin = true;
        }
        else
            if ((max - mid) % 2 == 1)
            {
                t = array[max];
                kmax = true;
            }
 
        do
        {
            
            if (array[i] > array[j])
            {
                buff[p] = array[j];
                buff[p + 1] = array[i];
            }
            else
            {
                buff[p] = array[i];
                buff[p + 1] = array[j];
            }
            
            array[i] = buff[p];
            if (i != max)
            array[i + 1] = buff[p + 1];
            i++;
            j++;
            p++;
 
        }
        while ((i <  middle) && (j <  max));
        if (kmax)
        {
            array[max] = t;
        }
        else 
            if (kmin)
            {
                array[min] = t;
            }
        return array;
        
        
 
}
Подскажите пожалуйста кто-нибудь в чём ошибка?Хочу рассортировать слиянием(примерно вот таким способом,сильно отличающийся от этого способ не нужен)
Миниатюры
Не работает сортировка слиянием  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.03.2017, 05:19
Ответы с готовыми решениями:

Неправильно работает сортировка слиянием
Всем привет!!! Пытаюсь реализовать алгоритм по книге , там псевдокод, я попытался перенести всё на...

Сортировка слиянием. Моя релизация не всегда корректно работает
Здравствуйте. Помогите найти ошибку, уже который день бьюсь над вопросом. 2- и 3-размерные массивы...

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

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

4
35 / 32 / 20
Регистрация: 26.02.2013
Сообщений: 184
24.03.2017, 08:02 2
ну первое что бросается в глаза, в массив из 7 элементов вы пытаетесь записать 8
0
0 / 0 / 0
Регистрация: 15.12.2016
Сообщений: 32
24.03.2017, 13:10  [ТС] 3
Да,опечатался,но на фото нет этой ошибки и программа выдает вместо сортировки совсем другое.
0
35 / 32 / 20
Регистрация: 26.02.2013
Сообщений: 184
25.03.2017, 15:16 4
Лучший ответ Сообщение было отмечено nnuttertools как решение

Решение

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
#include <utility>
#include <iostream>
#define zn 7
int*sort(int array[], int min, int max);
int main()
{
 
    int array[zn];
    for (int i = 0; i < zn; i++)
    {
        std::cin >> array[i];
    }
    sort(array, 0, zn - 1);
    for (int i = 0; i < zn; i++)
    std::cout << array[i] << " ";
    system("pause");
    return 0;
 
}
int*sort(int array[], int min, int max)
{
    if (max == min)
        return array;
    if (max - min == 1)
    {
        if (array[max] < array[min])
            std::swap(array[max], array[min]);
        return array;
    }
    int middle = (max + min) / 2;
    sort(array, min, middle);
    sort(array, middle + 1, max);
    int* buff = new int[zn];
    int p = 0, i = min, j = middle+1;
    while (max-min+1 != p)
    {
        if (i > middle)
            buff[p++] = array[j++];
        else if (j > max)
            buff[p++] = array[i++];
        else if (array[i] > array[j])
            buff[p++] = array[j++];
        else buff[p++] = array[i++];
    }
    for (int i = 0; i < p; i++)
    {
        array[i + min] = buff[i];
    }
    return array;
}
Не работает сортировка слиянием
2
0 / 0 / 0
Регистрация: 15.12.2016
Сообщений: 32
25.03.2017, 22:58  [ТС] 5
Спасибо большое
0
25.03.2017, 22:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.03.2017, 22:58
Помогаю со студенческими работами здесь

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

Шейкерная сортировка + сортировка слиянием
вот часть когда,которая выполняет шейкерную сортировку : для символьного и целочисленого массива ....

Сортировка слиянием
#include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; void Merge_Sort(int * a,int...

сортировка слиянием
программа должна выполнять сортировку строк слиянием с использованием указателей. ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru