1 / 1 / 0
Регистрация: 13.11.2013
Сообщений: 43
1

Естественное двухпутевое слияние

27.03.2014, 20:35. Показов 2151. Ответов 2
Метки нет (Все метки)

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
#include <stdio.h>
#include <stdlib.h>
 
int Merge (int mass1[1000], int mass2[1000])
{
    int q=MassiveLength(mass1[1000]);
    int r=MassiveLength(mass2[1000]);
    int i;
    int n=q+r;
    int merged[n];
    int a = 0, b = 0;
    for (i = 0; i < (n); i++)
            {
                if ((b < r) && (a < q))
                    if (mass1[a] > mass2[b])
                        merged[i] = mass2[b++];
                    else
                        merged[i] = mass1[a++];
                else
                    if (b < r)
                        merged[i] = mass2[b++];
                    else
                        merged[i] = mass1[a++];
            }
            return merged[n];
}
 
int MergeSort(int massive[1000])
{
    int m1[1000],m2[1000];
    int mid;
    int n;
    int i;
    n = MassiveLength(massive[1000]);
    mid =  n/2;
    for (i=0;i<mid;i++)
        m1[i] = massive[i];
    for (i=mid;i<n-1;i++)
        m2[i] = massive[i];
 
    int q = MassiveLength(m1[1000]);
    int r = MassiveLength(m2[1000]);
 
    return Merge(MergeSort(m1[q]),MergeSort(m2[r]));
}
 
 
int MassiveLength(int a[1000])
{
    int i;
    int t=0;
    int n=1000;
    for (i=0;i<n;i++)
    {
        if ((0<=a[i])&&(a[i]<=10000))
        {
            t++;
        }
    }
        return t;
}
 
int main()
{
    freopen("input.txt","r",stdin);
    int i,a[1000];
 
    for (i=0;i<1000;i++)
        scanf ("%d", &a[i]);
    int n = MassiveLength(a[1000]);
    MergeSort(a[n]);
    for (i=0;i<n;i++)
        printf ("%d",a[i]);
    return 0;
}
Схожий код сортировки на C# работает идеально. Нужно было переписать на С, но здесь программа вылетает. Думаю, проблема в 44й строке, но не знаю как реализовать по-другому. Если есть мысли по устранению ошибки - пишите.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.03.2014, 20:35
Ответы с готовыми решениями:

Естественное двухпутевое слияние
Реализация связи элементов линейного списка - указатели. Способ организации линейного связанного...

Двухпутевое слияние)))си++
#include &lt;conio.h&gt; #include &lt;iostream.h&gt; #include &lt;stdlib.h&gt; void clrscr(void); void main() {...

[java] двухпутевое слияние
Добрый вечер. Есть 2 файла, со строками произвольной длинны. Нужно отсортировать строки, а после,...

Простое двухпутевое слияние.Сортировка. Реализация
Привет всем. Возникла такая проблема: пытаюсь реализовать сортировку простым двухпутевым слиянием...

2
TTTTTT10
07.04.2014, 10:22 2
Ты не мог бы скинуть этот код на С#, пожалуйста?
1 / 1 / 0
Регистрация: 13.11.2013
Сообщений: 43
07.04.2014, 16:52  [ТС] 3
К сожалению, это не тот алгоритм
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2014, 16:52
Помогаю со студенческими работами здесь

Нисходящая сортировка слиянием. Двухпутевое слияние
Доброго времени суток, у меня возникла проблема, мне нужно написать функцию нисходящей сортировки...

Естественное слияние файлов
Естественное слияние файлов 0,5 мб

Внутреннее естественное слияние
собственно сортировка массива естественным слиянием. (Без использования файлов) Внутренняяя!! В...

Естественное слияние для файлов
Дан файл f, компоненты которого являются целыми числами. Известно, что никакая из компонент этого...


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

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

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