Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.79
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
#1

Сортировка слиянием в С++ - C++

30.11.2011, 21:33. Просмотров 2865. Ответов 5
Метки нет (Все метки)

Вот такое задание:
Составить программу реализации указанного метода сортировки и иллюстрации его выполнения. В программе предусмотреть просмотр входных и выходных данных и пошаговое перемещение элементов в соответствии с алгоритмом.
Для получения входных данных иметь три варианта:
a) непосредственный ввод и запись в текстовый файл;
b) генерирование с помощью датчика случайных чисел и запись в текстовый файл;
c) ввод из текстового файла
у меня в программе должна быть сортировка слиянием
vb.net
1
http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D1%81%D0%BB%D0%B8%D1%8F%D0%BD%D0%B8%D0%B5%D0%BC
помогите откорректировать программу
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <iostream> 
#include <cmath> 
#include <stdio.h> 
#include <time.h> 
using namespace std; 
template <typename Item>
void Merge(Item Mas[], int left, int right, int medium)
{         
    int j = left;
    int k = medium + 1;
    int count = right - left + 1;
    if (count <= 1) return;
    Item *TmpMas = new Item[count];
    for (int i = 0; i < count; i++)
    {
        if (j <= medium && k <= right)
        {
            if (Mas[j] < Mas[k]) 
                TmpMas[i] = Mas[j++];
            else 
                TmpMas[i] = Mas[k++];
        }
        else
        {
            if (j <= medium) 
                TmpMas[i] = Mas[j++];
            else 
                TmpMas[i] = Mas[k++];
        }
    }
    j = 0;
    for (int i = left; i <= right; i++)
    {
        Mas[i] = TmpMas[j++];
    }
    delete[] TmpMas;
}
FILE *t; 
int i,n,b,c; 
int *a; 
int main() 
{ 
    cout<<"Varianti vvoda (1 klava, 2 random, 3 iz faila)"<<endl; 
    cin>>c; 
    if (c==1) 
    { 
        cout<<"Chislo elementov massiva"<<endl; 
        cin>>n; 
        a= new int[n]; 
        cout<<"Vvod massiva"<<endl; 
        for (i=0;i<n;i++) 
            cin>>a[i]; 
        t=fopen("inoutput.txt","w"); 
        fprintf(t,"%d",n); 
        fprintf(t,"%s","\n"); 
        for (i=0;i<n;i++) 
        { 
            fprintf(t,"%d",a[i]); 
            fprintf(t,"%s"," "); 
        } 
        Merge(a,n); 
        for (i=0;i<n;i++) 
            cout<<a[i]<<" "; 
        fclose(t); 
    } 
    if (c==2) 
    { 
        cout<<"Kol-vo elementov massiva"<<endl; 
        cin>>n; 
        a= new int[n]; 
        for (i=0;i<n;i++) 
            a[i]=rand()%100; 
        cout<<endl; 
        for (i=0;i<n;i++) 
            cout<<a[i]<<" "; 
        cout<<endl; 
        t=fopen("inoutput.txt","w"); 
        fprintf(t,"%d",n); 
        fprintf(t,"%s","\n"); 
        for (i=0;i<n;i++) 
        { 
            fprintf(t,"%d",a[i]); 
            fprintf(t,"%s"," "); 
        } 
        Merge(a,n); 
        for (i=0;i<n;i++) 
            cout<<a[i]<<" "; 
        fclose(t); 
    } 
    if (c==3)
    {
        FILE* in;
        int ch;
        if ((in=fopen("inoutput.txt", "r"))!=NULL)
        {
            fscanf(in, "%5d", &ch);
            if (feof(in))
                printf("Pusto\n");
            else
         {
             n=0;
             fseek(in, 0, SEEK_SET);
             while (!feof(in))
             {
                 fscanf(in, "%5d", &ch);
                 n++;
             }
             a=new int[n];
             int t=0;
             fseek(in, 0, SEEK_SET);
             cout<<"massiv:\n";
             while (!feof(in))
             {
                 fscanf(in, "%5d", &ch);
                 a[t]=ch;
                 t++;
             }
             t--;
             for(i=0;i<t;i++)
                 cout<<a[i]<<" ";
             cout<<endl;
             Merge(a,t);
             for(i=0;i<t;i++)
                 cout<<a[i]<<" ";
         }
        }
        else
            cout<<"Nety faila";
        cout<<endl;
        for(int l=0;l<i;l++)
            cout<<a[l]<<" ";
        cout<<endl;
    }
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2011, 21:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка слиянием в С++ (C++):

Сортировка слиянием. В каком куске кода происходит сортировка и каким именно образом? - C++
Помогите, пожалуйста, разобраться. Подскажите в каком куске кода происходит сортировка и каким именно образом? #include &lt;iostream&gt; ...

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

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

Сортировка слиянием С++ - C++
Помогите пжлст написать программу со слиянием. Например вводим массивы A=1 2 3 и B= 4 5 6 и получить результат 1 2 3 4 5 6

Сортировка слиянием - C++
Требуется отсортировать слиянием массив структур. По одному из элемерту структуры. Вторая ночь без сна, не могу понять даже реализацию...

Сортировка слиянием - C++
Всем доброго время суток, дана задача: Требуется упорядочить элементы некоторого массива целых чисел, который следует упорядочить по...

5
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
04.12.2011, 19:16  [ТС] #2
посмотрите пожалуйста

Добавлено через 20 часов 42 минуты
может быть я саму сортировку неправильно реализовал?

Добавлено через 2 часа 20 минут
Merge(a,n); выдает ошибку на этом
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
04.12.2011, 19:19 #3
Алексей_123, есть встроенная функция в
C++
1
#include <algorithm>
0
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
04.12.2011, 19:23  [ТС] #4
какая функция?
0
PointsEqual
ниначмуроФ
836 / 520 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
04.12.2011, 19:31 #5
Цитата Сообщение от Алексей_123 Посмотреть сообщение
какая функция?
C++
1
stable_sort()
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
04.12.2011, 19:34 #6
Алексей_123, http://www.cplusplus.com/reference/algorithm/merge/
0
04.12.2011, 19:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2011, 19:34
Привет! Вот еще темы с ответами:

сортировка слиянием - C++
программа должна выполнять сортировку строк слиянием с использованием указателей. #include&lt;iostream&gt; #include&lt;string.h&gt; ...

Сортировка слиянием - C++
На лабороторной задали написать сортировку массива слиянием, рабочую версию реализовать удалось, только вот она жрёт лишнюю память, которая...

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

Сортировка слиянием? - C++
Условие задачи &quot;Элементы файлов f1 и f2 упорядочены по не убыванию. Объединить эти элементы в один файл f3, также упорядоченный по не...


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

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

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